C 以下代码不适用于';不要停止循环

C 以下代码不适用于';不要停止循环,c,C,我的目标是,如果ID在accounts.bin文件中,则返回0;如果ID不存在,则返回1。当条目在文件中时,我可以得到0的返回值,但当它不在文件中时,它不会停止循环 有什么想法吗?如果我没弄错的话(没有示例就无法真正检查accounts.bin): 这是因为在第17行,您关闭了循环中的文件;然后在下一次迭代中将关闭的文件传递给fread。您应该关闭返回检查上方的文件,在循环外。我只是犯了一个错误,把fclose放在循环内 int search(char *find){ info account;

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

有什么想法吗?

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


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

我只是犯了一个错误,把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;
}
将结束语句移到循环外部

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

info
未声明<代码>文件
未声明<代码>fopen未声明
fread
未声明
feof
未声明<代码>stricmp未声明<代码>i未使用。您的代码不会检查读取错误
fread
可能由于文件结束以外的原因而失败。您的代码关闭
文件
,然后在下一次迭代中将其传递给
fread
。未定义的行为。@GrumpyCrouton循环中有两个
break
语句,它们都是可访问的。@GrumpyCrouton这是一种“确定”方式。风格和个人喜好的问题。但我不喜欢。请修复我的CDO的格式;)检查<代码> FADAD < /代码>结果。您需要检查<代码> fOpen< <代码>和<代码> FRADE<代码>的错误。请考虑<代码>(FRADAD(帐户,SIZEOF(帐户),1,文件)> 0){…<代码/ > >黑板I……呃……我不明白。