为什么我的printf函数在以下C代码中没有返回正确的扫描值?

问题描述

我要扫描一个值,然后打印扫描的值

int main()
{
    int n;
    printf("enter value: ");
    n = scanf("%d",&n);
    printf("%d",n);
    return 0;
} 

但是,打印结果给了我1个而不是9个,如下所示。为什么会这样,我该如何解决呢?

enter image description here

解决方法

因为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);