我是C的初学者,正在尝试逐个字符地读取一个只包含Hello world字符的文本文件。
我的代码是:
#include <stdio.h>
#include <ctype.h>
FILE *fin = fopen("t1.txt", "r");
char temp = fgetc(fin);
printf("%c", temp);
while (temp != EOF) {
temp = fgetc(fin);
printf("%c", temp);
}
fclose(fin);
然而,输出是Hello world?我在Hello world的末尾添加了一行新代码,在它后面显示的是?我使用这段代码遍历并打印了一个用int填充的文本文件,没有出现任何问题,但是将%d改为%c会导致打印一个类似的奇怪字符。我被告知这是一个本地问题,可能与我PC上的东方语言或新的Eclipse更新有关。这里可能存在的问题是什么,我如何解决它?谢谢。
发布于 2020-06-18 20:20:18
#include <stdio.h>
#include <ctype.h>
FILE *fin = fopen("t1.txt", "r");
int temp;
while ((temp = fgetc(fin)) != EOF) {
printf("%c", temp);
}
fclose(fin);
我发现读取while
语句中的字符最容易,也最不容易混淆,如下所示。这允许更简洁的代码,并且可以防止打印EOF
字符,正如注释中提到的那样。
正如评论中也提到的,fgetc()
返回和int
,而不是char
,所以我在这里也做了更改。
如果可以的话,我还想指出,对于一个变量来说,temp
是一个非常糟糕的名称,因为它不是一个很好的描述性名称。也许可以考虑使用像c
这样的东西,这很简单。它很短,通常会让人知道你正在处理一个字符(尽管从技术上讲,它是一个int
)
发布于 2020-06-20 21:26:41
已通过分配(temp = fgetc(fin)) != EOF
修复此问题。
https://stackoverflow.com/questions/62455231
复制相似问题