为什么scanf只返回成功读取的输入数量?

时间:2018-12-21 04:04:19

标签: c io

我目前正在学习C程序,并且有一个简单的程序可以读取Integer Input,其代码如下所示:

int main() 
{ 
    int x; 
    printf("%d",scanf("%d",&x));  
    /* Suppose that input value given  
        for above scanf is 45 */
    return 1; 
}

Ouput是1

当我尝试这段代码时:

int main() 
{ 
    int x, z;
    printf("Enter The Value: ");
    int y = scanf("%d %d",&x, &z);
    printf("The value is %d", y);  
    /* Suppose that input value given  
        for above scanf is 20 789 */
    return 1; 
}

Ouput是2

这是我的问题,为什么scanf只返回number of input而不是用户输入的value?有人可以解释它如何工作吗?

1 个答案:

答案 0 :(得分:1)

scanf()可以处理多个输入-在第二个示例中,它正在将两个输入读入xz中。输入可以是许多不同的类型,但是必须将函数的返回值指定为特定类型,在这种情况下为int

由于scanf()将用户输入放入参数中指定的变量中,因此也无需将其作为函数值返回。

返回输入数量可以告诉您输入的成功程度。如果格式字符串中有两个%d,但仅返回1,则表示第二个输入看起来不像整数。将仅填写x,不会更新z。因此,您应该检查返回值是否等于您尝试解析的输入数量,并在输入不匹配时报告问题。