将参数列表中的scanf调用到printf

时间:2014-03-26 17:50:05

标签: c printf

当我执行以下代码时:

#include <stdio.h>

int main(void) {
    int i=10;
    printf("%d",i,scanf("%d",&i));
    return 0;
}

我得到的输出是用户输入

int main(void) {
    int i=10;
    printf("%d",scanf("%d",&i),i);
    return 0;
}

如果用户输入正确,则输出为1(表示整数类型)。 为什么每次执行scanf并且在任何情况下输出都不是10?

5 个答案:

答案 0 :(得分:1)

在为printf提供两个参数时,只显示一个数字,因此忽略第二个数字。

在第一种情况下,你只显示i,但它被scanf修改(我相信这实际上是未定义的,我可以在调用scanf之前进行评估)。

在第二种情况下,显示成功分配的项目数(1)。

答案 1 :(得分:1)

如果您的目标是打印用户输入的号码,请先拨打scanf()然后拨打printf()。不要把一个嵌套在另一个里面。

int i;
scanf("%d",&i);
printf("%d",i);

答案 2 :(得分:1)

printf中的参数数量不匹配

更改

printf("%d",scanf("%d",&i),i);

printf("return value of scanf: %d, i: %d",scanf("%d",&i),i);

答案 3 :(得分:0)

您的程序调用未定义的行为。 scanf()返回成功阅读的项目数 您在printf()中仅使用一个格式说明符来表示两个int个参数。

答案 4 :(得分:0)

您必须将printf参数的数量与输出格式化程序的数量相匹配,否则会发生奇怪的事情。