代码有什么问题?这些值未在阵列中正确保存。
/*Deklaration und Initialisierung*/
float addition1=15, addition2=9, subtrahend1=5, subtrahend2=2;
double multiplikation1=9, multiplikation2=21, divident1=10, divident2=2;
const char passwort[]="15sdDv4";
const char username[]="KevKevin";
char tippedpasswort[8], tippedusername[8];
fflush(stdin);
printf("******************* Identifikation ************************\n\n Benutzername: ");
fgets(tippedusername,9,stdin);
printf(" Passwort: ");
fflush(stdin);
fgets(tippedpasswort,9,stdin);
printf("Tippeduser: %s\nTippedpassword: %s\nUser: %s\nPassword: %s\n",tippedusername, tippedpasswort, username, passwort);
system("pause");
if (strcmp(tippedusername,username) != 0 || strcmp(tippedpasswort,passwort) != 0) {
printf("\nMELDUNG: Passwort oder Benutzername leider falsch!\n");
return 0;
}
答案 0 :(得分:2)
我想这是德语,对吗?唉,我不明白。
第1点
参考C11
标准,第7.21.5.2章,(强调我的)
如果
stream
指向输入流或未输入最新操作的更新流,则fflush
函数会将该流的任何未写入数据传递到主机环境被写入文件; 否则,行为未定义。
fflush(stdin);
是undefined behaviour。
第2点
我认为你错了fgets()
。根据{{3}}
fgets()
从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读数在EOF或换行符后停止。如果读取换行符,则将其存储到缓冲区中。 终止空字节(\0
)存储在缓冲区中的最后一个字符之后。
少一个是由于要求使用null,因此,您应该提供确切的分配大小,而不是+1
。
你必须改变
fgets(tippedusername,9,stdin);
到
fgets(tippedusername,8,stdin);
或
fgets(tippedusername,sizeof tippedusername,stdin);
tippedpasswort
案例相同。