2

抱歉,我是 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

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

4

3 回答 3

8
fscanf(input,"%c%d",&c,&num);

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

你不吃换行符。将其更改为:

fscanf(input,"%c%d ",&c,&num);
                  ^

作为解释,每一行都以一个字符结尾,'\n'. 如果你不做任何事情,%c会尝试阅读它,你会得到令人困惑的结果。一个便宜的技巧是添加一个空白区域fscanf,使其在一%c%d对夫妇之后吃掉所有空白。

编辑

根据 Peter Kowalski 的评论:

不应该是 fscanf(input,"%c %d ",&c,&num); ? 我在 %c 和 %d 之间添加了额外的空间

这个问题问得好。事情是忽略前导空格%d的说明符之一。无论流中有多少空白,都会将它们吃掉并丢弃。因此,前面的空白是隐含的。scanf%d

于 2012-08-26T16:31:48.843 回答
5

你还需要吃换行符。

fscanf(input,"%c%d\n",&c,&num);
于 2012-08-26T16:32:47.917 回答
2

快速修复:只需printf()

 printf("%c:%d\n",c,num);

 printf("%c %d",c,num);

还有其他方法,例如调整您的 current scanf(),这会更好,因为它可以从源头解决问题(您正在阅读并保留换行符)。

或者,您可以只阅读整行而不将其解析为组件并将其打印出来。

于 2012-08-26T16:31:20.617 回答