【问题标题】:Why is scanf() taking wrong input? [closed]为什么 scanf() 输入错误? [关闭]
【发布时间】:2014-01-02 01:43:12
【问题描述】:

我对 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
为什么会这样?

【问题讨论】:

  • 请使用手册和文档了解您尝试使用的任何特定事物的工作原理。询问一些已经在其他地方得到更好记录的基本问题,既没有成效也没有建设性。
  • 感谢您的建议。我一定会遵守的

标签: c input output scanf


【解决方案1】:

不要将scanf 的返回值分配给num1num2scanf 的返回值表示扫描是否成功,而不是你想象的那样。

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

【讨论】:

    【解决方案2】:

    这是因为scanf 返回匹配的字符数。 scanf("%d",&amp;num1)scanf("%d",&amp;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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        为什么要将 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; 
        
        } 
        

        【讨论】:

          猜你喜欢
          • 2018-01-24
          • 1970-01-01
          • 2015-03-15
          • 1970-01-01
          • 2022-09-29
          • 1970-01-01
          • 2012-06-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多