【发布时间】:2017-08-23 11:48:22
【问题描述】:
我正在制作一个文件阅读器,它可以从文件中逐行读取整数。问题是它不起作用。我认为我以错误的方式使用 fscanf 。有人可以帮我吗?
我已经在其他问题中寻找答案,但我找不到任何解释我的代码为什么不起作用的东西。
int read_from_txt(){
FILE *file;
file = fopen("random_numbers.txt", "r");
//Counting line numbers to allocate exact memory
int i;
unsigned int lines = 0;
unsigned int *num;
char ch;
while(!feof(file)){
ch = fgetc(file);
if (ch == '\n'){
lines++;
}
}
//array size will be lines+1
num = malloc(sizeof(int)*(lines+1));
//storing random_numbers in num vector
for(i=0;i<=lines;i++){
fscanf(file, "%d", &num[i]);
printf("%d", num[i]);
}
fclose(file);
}
txt文件是这样的:
12
15
32
68
46
...
但是这段代码的输出一直给出“0000000000000000000...”
【问题讨论】:
-
在
fgetc循环之后,文件指针位于文件末尾。您需要rewind再次阅读该文件。 -
@Lashane
file以文本模式打开。对应于编译器对文本文件的 C 库理解的文本文件会将\n、\r\n或\r转换为'\n'。if (ch == '\n')就足够了。如果需要处理其他文本文件,则会出现许多其他问题,超出了本文的范围。 -
提示:任何时候代码没有按预期运行并且代码正在执行 I/O,添加代码以检查 I/O 函数的返回值,例如
fscanf(file, "%d", &num[i]);,这会显示一个问题 - 这个节省您的时间。 -
while(!feof(file))is always wrong。fgetc返回int而不是char。