【发布时间】:2019-01-05 21:39:28
【问题描述】:
美好的一天,这是我的代码:
FILE* fp;
fp = fopen("a.txt","r+");
if (fp != NULL){
int c = 0;
while(!feof(fp)) {
char k = fgetc(fp);
if (k == '$') {
c = 0;
printf("inside '%c' %d\n", k, c);
continue;
}
c++;
printf("outside '%c' %d\n", k, c);
}
这是文件:
123456$test$pan$test$
输出:
在“1”之外 1
外'2' 2
外'3' 3
外'4' 4
外'5' 5
外'6' 6
'7side' //*
在“$”内 0
外't' 1
在“e”之外 2
外面的 3
外面't' 4
'5side' //*
在“$”内 0
在“p”1之外
在“a”之外 2
外'n' 3
在“$”内 0
外't' 1
在“e”之外 2
外面的 3
外面't' 4
在“$”内 0
' ' 1 外 //*
我无法理解 //* 发生了什么
感谢您的帮助!
【问题讨论】:
-
不要发布代码图片,也不要发布代码链接。您的问题应包含minimal reproducible example
-
完成,完成!我的坏
-
文本文件中似乎有一些没有在编辑器中显示的 CR。它是 Windows 上的编辑器和 Linux EOL 的文件吗?您是否在十六进制查看器中查看了您的文件?
-
不是您的问题的答案,而是您的代码的其他一些问题:1.
while (!feof(fp))不好。feof仅在您尝试从FILE*读取失败之后返回非零值。 2.char k = fgetc(fp);不好,因为fgetc返回int,而不是char。fgetc在失败时返回EOF,您没有检查(并且无法检查,因为您将返回值截断为char。相反,您的循环应该是int k; while ((k = fgetc(fp)) != EOF) { ...。