所以,我正在开发一个简单的密码程序。到目前为止,我已经获得了此代码
/* simple password prog */
#include<stdio.h>
#include<string.h>
int main(){
char usrIn[9];
char password[]={"AXcd8002"};
do {
fprintf(stdout,"\n Password:");
fgets(usrIn,9, stdin);
if ( strcmp(usrIn,password)<0 || strcmp(usrIn,password )>0 ) {
fprintf(stdout,"\n Password incorrect"); };
}while( (strcmp(password,usrIn))!=0 );
fprintf(stdout, "\n The password is correct \n");
return 0;
}
此代码正常工作,如果密码不正确,循环将继续,如果正确 - 循环将中断。但是不起作用的是:如果用户输入的密码至少有一个字符更长,程序仍然会说它是正确的。 例如,如果用户输入AXcd8002AAA,则fgets将只读取AXcd8002,并忽略AAA。我怎样才能防止这种情况发生?
答案 0 :(得分:3)
usrIn
只有9个字符,当然会忽略额外的字符。只需给usrIn
足够的空间:
char usrIn[100];
作为最佳实践:
fgets(usrIn, sizeof(usrIn), stdin);
您还没有考虑到另一个问题:新行字符'\n'
被fgets
视为有效字符,所以它也在{{ 1}},您需要在比较密码之前手动删除它。
答案 1 :(得分:0)
没有给出usrIn的大小给它动态的大小&amp;执行动态输入会将完整密码插入数组usrIn。