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

ara*_*n0n 2 c

抱歉,我是新来的,我想从txt文件中读取这些数据.

A 7
c 5
y 6
U 9
j 4
Z 3
z 5
0
Run Code Online (Sandbox Code Playgroud)

这是我的代码

 while(feof(input)==0){
    char c;
    int num;
    fscanf(input,"%c%d",&c,&num);
    printf("%c:%d\n",c,num);
}
Run Code Online (Sandbox Code Playgroud)

但结果是控制台与txt文件的结果不一样

打开文件完成

A:7

:7
c:5

:5
y:6

:6
U:9

:9
j:4

:4
Z:3

:3
z:5

:0
Run Code Online (Sandbox Code Playgroud)

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

cni*_*tar 8

fscanf(input,"%c%d",&c,&num);
Run Code Online (Sandbox Code Playgroud)

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

你不是在吃换行符.改为:

fscanf(input,"%c%d ",&c,&num);
                  ^
Run Code Online (Sandbox Code Playgroud)

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

编辑

根据Peter Kowalski的评论:

不应该是fscanf(输入,"%c%d",&c,&num); ?我在%c和%d之间放了额外的空格

这个问题问得好.事情是忽视领先空间%d的指定者之一.无论溪流中有多少空白,都会吃掉并丢弃它们.因此,之前的空白是隐含的.scanf%d


Stu*_*tLC 5

你还需要吃新线.

fscanf(input,"%c%d\n",&c,&num);
Run Code Online (Sandbox Code Playgroud)