【发布时间】:2015-11-01 15:59:39
【问题描述】:
为什么字符串之间的比较不起作用?
我确定user 字符串的末尾没有任何尾线,但我仍然知道用户名不被接受。
char user[24];
int userLog = -1;
FILE *usernames;
usernames = fopen("usernames.cfg", "r");
if (usernames == NULL){
perror("usernames - err");
return(-1);
}
while(fgets(user, sizeof(user), usernames) !=NULL){
strtok(user, "\n");
printf("%s -- %s\n", user, possibleUsername);
// First edition of question contained:
// if((possibleUsername, user) == 0)
// Still having problems with this version:
if(strcmp(possibleUsername, user) == 0)
userLog = 1;
else
userLog = 0;
}
if(userLog == 1) printf("Username accepted: %s\n", possibleUsername);
else if(userLog == 0) printf("Username doesn't exist in the database.\n");
fclose(usernames);
用户名.cfg:
user
justplayit
etc
【问题讨论】:
-
if((possibleUsername, user)缺少strcmp。 -
可以显示
usernames.cfg的内容吗?如果它们总是在新行上,它们总是以换行符结尾,但user字符串不像你说的那样。这可能是问题所在。 -
使用需要
break;如userLog = 1;-->{ userLog = 1; break;} -
@cad:由
strtok处理。 BLUEPIXY 做到了——即使有一个匹配,循环也会继续所有个名字。 -
您的报告还应涵盖
userLog == -1,如果数据库中还没有姓名,则会发生这种情况。您可以使用else子句来覆盖userLog中的任何其他值,尽管唯一可能的值是-1。