如何解决为什么我的printf函数在以下C代码中没有返回正确的扫描值?
我要扫描一个值,然后打印扫描的值
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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。