【问题标题】:while loop for largest and smallest values Error最大值和最小值的while循环错误
【发布时间】:2021-06-23 05:45:27
【问题描述】:

如果用户立即退出(输入 -1),最小的数字会显示 100000 而不是 0,在编写序列列表(1、2、3、4 等)时也会发生这种情况,请帮助。我尝试使用 do-while 循环,但也遇到了同样的问题。

这是任务:

编写一个程序,不断从用户那里获取数字,直到用户输入 -1。最后,您的程序将显示最大和最小的数字。

Output (with sequence list)     
                                       
 To Exit Enter (-1)
 enter a number: 1
 enter a number: 2
 enter a number: 3
 enter a number: 4
 enter a number: 5
 enter a number: -1

Largest Number: 5
 Smallest number: 10000000

output (with random numbers)
 To Exit Enter (-1)
 enter a number: 33
 enter a number: 12
 enter a number: 50
 enter a number: 6
 enter a number: 10
 enter a number: -1

 Largest Number: 50
 Smallest number: 6

output (when existing immediately)
 To Exit Enter (-1)
 enter a number: -1

 Largest Number: 0
 Smallest number: 10000000

我的代码:

 int main()
    {
        int num, minimum=10000000 , max=0;
        int choice;
        printf(" To Exit Enter (-1)\n");
        
        while(num!=-1)
        {
        
            printf(" enter a number: ");
            scanf("%d",&num);
            
            if(num>max)
            {
                max=num;
            }
            
            else if(num<minimum && num!=-1)
            {
                minimum=num;
            }
        }
    
    
            printf("\n Largest Number: %d \n Smallest number: %d",max,minimum);
    }

【问题讨论】:

  • 如果num大于max,你也只检查num &lt; minimum。在您的示例输入中,num &gt; max 始终为真(直到您输入 -1 这是它自己的特殊情况),因此永远不会输入 else if 分支。
  • 建议大家学习做基本调试。在调试器中运行您的程序,并在运行时跟踪其流程和变量值。 How to debug small programs
  • while(1){scanf(num);if(num==-1)break; min-max thing;} 写最小值和最大值。使用 INT_MAX 和 INT_MIN。
  • @NathanPierson 对不起,我不太明白你在初始化之前测试 num 的值是什么意思
  • while(num != 1) 在循环开始时检查num 是否等于1。第一次循环时,num 已声明但未初始化,因此读取其值是未定义的行为。

标签: c


【解决方案1】:

删除else即可解决问题:

int main()
    {
        int num, minimum=10000000 , max=0;
        int choice;
        printf(" To Exit Enter (-1)\n");
        
        while(num!=-1)
        {
        
            printf(" enter a number: ");
            scanf("%d",&num);
            
            if(num>max)
            {
                max=num;
            }
            
            if(num<minimum && num!=-1)
            {
                minimum=num;
            }
        }
    
    
            printf("\n Largest Number: %d \n Smallest number: %d",max,minimum);
    }

问题在于 if 条件始终为真,因为您输入的是升序数字,所以 else 条件从未执行过

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 2021-11-27
    • 2023-03-11
    • 2022-09-29
    • 1970-01-01
    • 2016-10-06
    • 2018-09-21
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多