【发布时间】:2020-09-07 23:27:14
【问题描述】:
我在循环 fscanf 时遇到问题。在下面的代码中(关注 while 循环开始的部分),我循环 fscanf 直到它到达 EOF。从下面的第 2 部分可以看出,到 fscanf 的 .txt 文件只有 6 个字符串,因此 fscanf 应该只循环 6 次然后到达 EOF。但是,从程序输出(下面的第二部分)可以看出,fscanf 循环了 7 次。由于我的程序以相反的顺序显示导弹名称,因此我假设 while 循环最后再循环 1 次,导致第三张图片第一行的空白行输出。
谁能告诉我如何解决这个问题?
C 代码
while(fscanf(readmissiles,"\n %s \n",missilename)!=EOF)
{
missilename=malloc(20*sizeof(char));
insertvalue(LL,missilename);
missilenum++;
}
从 FSCANF 到文本文件
单身
飞溅
单身
V-线
H线
单身
输出/显示
/Single 前面有空行显示/
单身
H线
V-线
单身
飞溅
单身
7
【问题讨论】:
-
使用
missilename=malloc(20*sizeof(char));覆盖指针值,可能会丢失scanf的结果。 -
我解决了这个问题。我使用 fgetc(..)!=EOF 作为循环条件并将我的 fscanf(..) 放入 malloc 下方的循环中。在循环开始时,我使用 fseek(..,-1,SEEK_CUR) 将当前移回一个空格,因为它在循环条件检查期间被 fgetc 移动了。我得到了我想要的输出。这是最佳方式还是有另一种更简单的方式,因为我的方法听起来很愚蠢。