[英]i am very confused about reading from txt file
对不起,我是新来的ci想从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
我的代码是正确的,不是吗?
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
之前的空白是隐含的。
你还需要吃新线。
fscanf(input,"%c%d\n",&c,&num);
快速修复:只需调整printf()
语句即可
printf("%c:%d\n",c,num);
至
printf("%c %d",c,num);
还有其他方法,比如调整当前的scanf()
,这样可以更好地解决源代码问题(您正在阅读并保留换行符)。
或者,您可以只读取整行,而无需将其解析为组件并将其打印出来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.