以下代码不会停止循环

时间:2017-10-19 15:51:10

标签: c

int search(char *find){
info account;
int check, i = 0;

FILE *file = fopen("accounts.bin", "rb");

while(1){
    fread(&account, sizeof(account), 1, file);
    if(feof(file)){
        check = 1;
        break;
    }
    if(stricmp(account.id, find) == 0){
        check = 0;
        break;
    }
fclose(file);
}
return check;
}

我的目标是,如果ID在accounts.bin文件中,则返回0;如果ID不存在,则返回1。当条目在文件中时,我可以得到0的返回值,但是当它没有时,它不会停止循环。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

如果我没有弄错(如果没有示例accounts.bin,真的无法检查):

这是因为在第17行你关闭循环中的文件;然后在下一次迭代中将关闭的文件传递给fread。您应该在循环外的return check;上方关闭文件。

答案 1 :(得分:1)

我只是犯了把fclose放在循环中的错误。

将结束语句移到循环外部。

int search(char *find){
    info account;
    int check, i = 0;

    FILE *file = fopen("accounts.bin", "rb");

    while(1){
        fread(&account, sizeof(account), 1, file);
        if(feof(file)){
            check = 1;
            break;
        }

        if(stricmp(account.id, find) == 0){
            check = 0;
            break;
        }
    }
    fclose(file);
    return check;
}