gpt4 book ai didi

c - fscanf 在末尾扫描一个额外的字符

转载 作者:太空宇宙 更新时间:2023-11-04 04:23:29 26 4
gpt4 key购买 nike

它总是在末尾打印一个额外的字符。这是代码:

#include <stdio.h>

int main ()
{
char bit;
FILE *fp_read,*fp_write;
fp_read = fopen("test.txt","r");

if(fp_read==NULL) {
printf("Error!! Unable to open the file!!");
return 1;
}
while(!feof(fp_read)) {
fscanf(fp_read,"%c",&bit);
printf("%c",bit);
}
fclose(fp_read);

return 0;
}

如果 test.txt 包含 010101,它会打印 0101011。如果 00110 则打印 001100。如果它包含 abc 则打印 abcc 。这意味着它总是重复最后一个字符。

问题是什么?谁能解释一下?

最佳答案

我无法重现错误。

请参阅 David Bowling 在原帖中的第一条评论以获得简洁的解释。

cppreference page for feof有一个较短的版本。

The eof function only reports the stream state as reported by the most recent I/O operation, it does not examine the associated data source. For example, if the most recent I/O was a fgetc, which returned the last byte of a file, feof returns zero. The next fgetc fails and changes the stream state to end-of-file. Only then feof returns non-zero. In typical usage, input stream processing stops on any error; feof and ferror are then used to distinguish between different error conditions.

这意味着在while循环中使用feof可能并不合适。文件的最后一个字符可能是垃圾字符,并且在不同系统中会有所不同。

尝试这样做。

while(fscanf(fp_read,"%c",&bit) != EOF) {        
printf("%c",bit);
}

关于c - fscanf 在末尾扫描一个额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43954011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com