A 7
c 5
y 6
U 9
j 4
Z 3
z 5
0
这是我的代码
while(feof(input)==0){
char c;
int num;
fscanf(input,"%c%d",&c,&num);
printf("%c:%d\n",c,num);
}
但是控制台的结果与txt文件不同 结果是
打开文件完成
A:7
:7
c:5
:5
y:6
:6
U:9
:9
j:4
:4
Z:3
:3
z:5
:0
我的代码是正确的,不是吗?
答案 0 :(得分:8)
fscanf(input,"%c%d",&c,&num);
我的代码是正确的,不是吗
你没有吃新线。将其更改为:
fscanf(input,"%c%d ",&c,&num);
^
作为解释,每一行以一个字符'\n'
结尾。如果您对此没有任何操作,%c
会尝试阅读它,您会得到令人困惑的结果。一个便宜的技巧是在fscanf
中添加一个空格,这样就可以在%c%d
对之后吃掉所有空格。
根据Peter Kowalski的评论:
不应该是fscanf(输入,“%c%d”,& c,& num); ?我已经加了 %c和%d之间的空格
这是一个非常好的问题。事情%d
是忽略领先空间的说明符之一。无论流中有多少空格,scanf
都会吃掉并丢弃它们。因此,%d
之前的空白是隐含的。
答案 1 :(得分:5)
你还需要吃换行符。
fscanf(input,"%c%d\n",&c,&num);
答案 2 :(得分:2)
快速修复:只需从
调整printf()
语句即可
printf("%c:%d\n",c,num);
到
printf("%c %d",c,num);
还有其他方法,比如调整当前的scanf()
,这样做更好,因为它解决了源头的问题(您正在阅读并保留换行符)。
或者你可以只读取整行而不将其解析成组件并打印出来。