输入值未在char数组中正确保存

时间:2015-05-07 06:14:32

标签: c arrays string char fgets

代码有什么问题?这些值未在阵列中正确保存。

/*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;
}

1 个答案:

答案 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案例相同。