【发布时间】:2016-10-25 12:17:20
【问题描述】:
我正在读取带有scanf 的整数,同时检查scanf 读取的位数,格式为%n,第一个输出始终正确,但之后输出增加了一个。即scanf 读取最后一个"\n" 为第二个scanf。
我知道scanf 和char 的这种问题,即scanf("%c",&cval) ---> 到scanf(" %c",&cval) 留下一些空间以避免scanf 读取行尾。但是整数是什么?
我已经在这里看到了一些问题Link here 并且他们似乎都认为scanf() 是"retarted" 并且应该始终使用 fget() .. 真的是这样吗?在项目中避免它是否很好?我的意思是消除所有此类错误,有没有办法防止这种情况发生。
我必须为此使用fget(),还是有办法在scanf() 中解决这个问题。欢迎所有 cmets,感谢您的宝贵时间。我只是想知道有没有办法修复它,我知道如何使用 %n。
#include <stdio.h>
int main(void) {
int i =0 ,byte_count = 0,val;
printf("Enter a number: ");
scanf("%d%n",&val,&byte_count);
while (i < 3){
printf("byte count is: %d\n",byte_count);
scanf("%d%n",&val,&byte_count);
i++;
}
return 0;
}
【问题讨论】:
-
@J.Piquard 我没有说我不知道“%n”代表什么,当然也不是重复的。我知道 %n 做了什么。
-
首先你可以检查
scanf()的返回值是否等于2。 -
\n3049:一个换行符 + 4 个数字 = 5。 -
@J.Piquard
%n不计入输入元素。