排序3个数字会产生奇怪的结果(C ++)

时间:2017-02-19 21:57:38

标签: c++ sorting numbers

这一点是找到最小的数字,下一个最小的数字和最大的数字。然后按升序输出它们。但是,当我试图运行这个程序时,我得到一个0,一个指数数字和一个3(输入的数字是1,2,3,以保持简单并确保它有效)。我不确定这些奇怪的结果来自哪里,没有涉及数学,所以我不确定这些甚至是可能的。此外,本练习中不允许使用数组。相信我,我宁愿这样做。

//local variables
int num1;
int num2;
int num3;
int numSmall;
int numMid;
int numLarge;

//Prompt the user for 3 numbers
cout << ("Please enter your first number: ")<<endl;
cin >> num1;
cout << ("Please enter your second number: ")<<endl;
cin >> num2;
cout << ("Please enter your final number: ")<<endl;
cin >> num3;

//compare the 3 numbers to find the order
if (num1 > num2 && num1 > num3){
    numLarge = num1;
    if (num2 > num3){
        numMid = num2;
        numSmall = num3;
    }
    else
       numMid = num3;
       numSmall = num2;
}
else if (num2 > num1 && num2 > num3){
    numLarge = num2;
    if (num1 > num3){
        numMid = num1;
        numSmall = num3;
    }
    else
       numMid = num3;
       numSmall = num1;
}
else{
    numLarge = num3;
    if (num1 > num2){
        numMid = num1;
        numSmall = num2;
    }
}
cout << ("The smallest number is: ") << numSmall << endl;
cout << ("The next smallest number is: ") << numMid << endl;
cout << ("The largest number is: ") << numLarge << endl;


//Pause to read output
system ("pause");

//clear screen to display output
system ("cls");

//Indicate to OS successful termination of program
return 0;

4 个答案:

答案 0 :(得分:1)

你的缩进是误导性的:

   else
       numMid = num3;
       numSmall = num2;

应该是:

else {
    numMid = num3;
    numSmall = num2;
}

否则,代码将等同于此,我认为这不是您打算做的事情:

else {
    numMid = num3;
}

numSmall = num2;

您的计划中还有一些逻辑路径,其中numMidnumSmall未被初始化。查看最后一个else

如果读取未初始化的int,则会发生未定义的行为,这会导致各种奇怪的效果。

您应该在编译器中使用更高的警告级别。例如,带有/W4的Visual C ++会立即发现错误:

stackoverflow.cpp(58) : warning C4701: potentially uninitialized local variable 'numMid' used
stackoverflow.cpp(57) : warning C4701: potentially uninitialized local variable 'numSmall' used

答案 1 :(得分:0)

在ifs的最后阶段看起来你忘记了其他的东西,如果最大的数字是第三个,那么总会得到错误的结果。

答案 2 :(得分:0)

你有两个问题,解决它们,它会正常工作。 (我查了一下)

问题1

按如下方式更新您的最后一个else块。 [如果else不大于num1,则错过num2条件

else{
    numLarge = num3;
    if (num1 > num2){
        numMid = num1;
        numSmall = num2;
    }else{
        numMid = num2;
        numSmall = num1;
    }
}

问题2

将大括号放在elseif条件块内的else if条件中。因此,最终代码应如下所示。

if (num1 > num2 && num1 > num3){
    numLarge = num1;
    if (num2 > num3){
        numMid = num2;
        numSmall = num3;
    }else{
       numMid = num3;
       numSmall = num2;
    }
}
else if (num2 > num1 && num2 > num3){
    numLarge = num2;
    if (num1 > num3){
        numMid = num1;
        numSmall = num3;
    }else{
       numMid = num3;
       numSmall = num1;
    }
}
else{
    numLarge = num3;
    if (num1 > num2){
        numMid = num1;
        numSmall = num2;
    }else{
        numMid = num2;
        numSmall = num1;
    }
}

答案 3 :(得分:0)

更正的代码。感谢大家的帮助。

import fontawesome from 'fontawesome';