我对从txt文件中读取非常困惑

时间:2012-08-26 16:29:19

标签: c

抱歉,我是c的新人 我想从txt文件中读取这些数据。

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

我的代码是正确的,不是吗?

3 个答案:

答案 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(),这样做更好,因为它解决了源头的问题(您正在阅读并保留换行符)。

或者你可以只读取整行而不将其解析成组件并打印出来。