我正在尝试逐行读取,并将值放在稍后使用的整数上。我使用fgets,它返回0,没有进入while循环,现在我使用fscanf,它返回-1,我也无法进入while环。我将在这里插入代码段和我使用的文本文件。
FILE *f;
f = fopen( fileNames[i], "r");
if (f == NULL) {
printf("Failed to open a filen");
}
int number;
printf("fscanf value %dn", (fscanf( f, "%d", &number))); //returns -1 always
while( fscanf( f, "%d", &number) > 0){ // does NOT get into the while loop
for(int i = 0; i < intervalCount; i++){
if( // operations I use in my project ){
// operations that I will use in my project
}
}
}
fclose(f);
文本文件有点像
1534
1535
1420
1400
1600
1601
2500
1536
1537
1538
请帮忙,我真的不明白问题出在哪里。
对于某些澄清,f不是NULL,它不会进入if语句。
如果fopen()
失败,您应该退出函数,否则在使用空指针调用fscanf()
时会出现未定义的行为。
一般来说,您应该在诊断消息中输出更多信息,以帮助查找这些调用失败的原因。
调试器中的单步执行也是一种不错的方法。
#include <errno.h>
#include <stdio.h>
#include <string.h>
[...]
FILE *f;
f = fopen(fileNames[i], "r");
if (f == NULL) {
fprintf(stderr, "Failed to open file %s: %sn",
fileNames[i], strerror(errno));
} else {
int number;
int res = fscanf(f, "%d", &number);
if (res != 1) {
fprintf(stderr, "reading from %s: fscanf returns %dn",
fileNames[i], res);
} else {
while (fscanf(f, "%d", &number) == 1) {
for (int i = 0; i < intervalCount; i++) {
if (// operations I use in my project) {
// operations that I will use in my project
}
}
}
}
fclose(f);
}