问题描述
我要扫描一个值,然后打印扫描的值
int main()
{
int n;
printf("enter value: ");
n = scanf("%d",&n);
printf("%d",n);
return 0;
}
但是,打印结果给了我1个而不是9个,如下所示。为什么会这样,我该如何解决呢?
解决方法
因为n
被scanf的返回值覆盖
如果您不希望分配给scanf("%d",&n);
的已分析项目数,只需使用n
。
scanf()
不返回其扫描的值,而是返回成功读取的项目数。输入&n
是缓冲区的地址,scanf()
用其扫描的内容填充。
只需致电
scanf("%d",&n);
如果您不想进行任何错误检查。
,为什么我的printf函数没有在打印机中返回正确的扫描值 遵循C代码?
您误会了。 printf
呼叫
n = scanf("%d",&n);
printf("%d",n);
输出由scanf调用返回的正确值。
根据(7.21.6.4 scanf函数)
3 scanf函数如果输入则返回宏EOF的值 在第一次转换(如果有)完成之前发生故障。 否则,scanf函数将返回分配的输入项的数量,该数量可能少于输入项中提供的数量,甚至为零。 早期匹配失败的事件。
正如scanf的调用
n = scanf("%d",&n);
仅分配了一项,则其返回值等于1。该值是您在下一次调用printf时输出的值
printf("%d",n);
如果要在scanf调用中输出分配的项目,则不要用scanf调用的返回值覆盖它,例如
scanf("%d",n);
或者你可以写
if ( scanf("%d",&n) == 1 ) printf("%d",n);