为什么scanf()输错了?

时间:2014-01-02 01:43:12

标签: c input output scanf

我是C的新手,正在编写一个非常简单的小程序。问题是scanf()输错了: -

    #include <stdio.h> 
    int main(int args, char*argv[])
    {
       int num1 = scanf("%d",&num1) ; 
       int num2 =scanf("%d", &num2) ;
       printf("Num1 = %d\n", num1) ; 
       printf("Num2 = %d\n", num2) ; 
       return 0 ; 
    }  

当我输入34和23作为输入时,它输出: -

Num1 = 1
Num2 = 1
为什么会这样?

4 个答案:

答案 0 :(得分:4)

请勿将scanf的返回值分配给num1num2scanf的返回值表示扫描是否成功,而不是您的想法。

int num1, num2; 
scanf("%d", &num1); 
scanf("%d", &num2);

答案 1 :(得分:3)

这是因为scanf返回匹配的字符数。 scanf("%d",&num1)scanf("%d",&num2)将返回1。您正在将该号码指定为1num1num2 现在按如下方式进行:

#include <stdio.h> 
int main(int args, char*argv[])
{
   int num1;  
   int num2;
   scanf("%d",&num1) ;  
   scanf("%d", &num2) ;
   printf("Num1 = %d\n", num1) ; 
   printf("Num2 = %d\n", num2) ; 
   return 0 ; 
}   

建议阅读:comp.lang.c FAQ list · Question 3.8

答案 2 :(得分:2)

您将scanf的返回值分配给您的值。 scanf返回匹配的字符数;你已经传递了一个对你希望scanf存储结果的变量的引用。

答案 3 :(得分:1)

为什么要将scanf的返回值分配到num1和num2?

我的建议:

#include <stdio.h> 
int main(int args, char*argv[])
{
   int num1, num2;  

   scanf("%d",&num1); 
   scanf("%d", &num2);
   printf("Num1 = %d\n", num1); 
   printf("Num2 = %d\n", num2); 
   return 0; 

}