出于某种原因,我不明白为什么,我的fscanf代码不起作用。我的朋友有相同的任务和相同的代码为他工作。
ISBNPrefix::ISBNPrefix(const char * filename) {
FILE * prefixFile = NULL;
if (filename != NULL)
prefixFile = fopen(filename, "r");
}
bool ISBNPrefix::isRegistered (int area) const {
int areaDigit = 0;
bool check = false;
//rewind(prefixFile);
while(fscanf(prefixFile, "%d %*[^ ] %*[^\n]", &areaDigit) != EOF) {
if (areaDigit == area) {
check = true;
break;
}
}
return check;
}
它没有fscanf正确,它应该在某些测试中返回true但它返回false;我不认为它扫描正常。任何人都可以看到什么是错的吗?
我的文本文件的前四行是:
0 00 19
0 200 699
0 7000 8499
0 85000 89999
答案 0 :(得分:2)
这一行:
while(fscanf(prefixFile, "%d %*[^ ] %*[^\n]", &areaDigit) != EOF) {
将
在读取areaDigit
的数字之前,它是否应该到达文件的末尾,循环将结束。例如,输入如:
123 456 789
555 xxx yyy
它会以areaDigit
循环两次,分别为123和555
输入如下:
1 2 3 4 5 6 7 8 9
a b c d e f g h i
它将读取1
,然后进入无限循环,无法读取第二行(始终为areaDigit == 1
。)
输入如下:
1
2
3
4
5
6
7
它将使用areaDigit
循环3次,分别为1,4和7