查找两个数字之间的值范围时的奇怪行为

时间:2015-06-24 13:02:21

标签: c++

我最近开始研究“c ++ primer 5th Edition”。我目前正在进行以下练习:

  

练习1.11:   编写一个程序,提示用户输入两个整数。   打印由这两个整数指定的范围内的每个数字。

我已经编写了以下代码作为解决方案:

#include <iostream>

int main(){
    int num1 = 0, num2 = 0;
    std::cout << std::endl << "Please enter two numbers to find a range between" << std::endl;
    std::cin >> num1 >> num2; 


    if (num1 < num2)
        while (num1 <= num2){
            std::cout << std::endl << num1;
            ++num1;
        }

    if (num2 < num1)
        while (num2 <= num1){
            std::cout << std::endl << num2;
            ++num2;
        }

    if (num1 == num2)
        std::cout << std::endl << num1;

    std::cout << std::endl;

但是当我输入数字时,输出不太正确;

示例输入:

Please enter two numbers to find a range betweem
>> 1 5

示例输出:

1
2
3
4
5
5
6    

我不明白的是,如果我输入的第一个数字大于第一个数字(例如num1&gt; num2),那么程序会产生所需的结果,例如:

Please enter two numbers to find a range between
>> 5 1


1
2
3
4
5

特别令人困惑的是,当我交换条件语句的顺序时,第一个例子将正常工作,第二个例子将产生不正确的输出。

为了清楚起见,我知道这个练习的清洁,正确的解决方案。我想知道我的程序以这种方式运行的原因。

我非常感谢你的解释!

3 个答案:

答案 0 :(得分:5)

它如此简单。 只需添加其他&#39;对于底部两个if循环 基本上你只需要经历1&#39;如果&#39;循环,但你的程序会经历每个&#39;如果&#39;环

答案 1 :(得分:1)

实际上,当num1循环的所有迭代完成第二个while时,你在第一个条件下增加if condition因为它的第一个if的循环退出条件(即num1&lt; = num2),所以你的第二个如果被触发并打印最后一个5 6

在第二种情况下,您的第一个if未触发且您达到第二个if,因此您的流程正常运行

答案 2 :(得分:1)

正如Technoid所说,添加else语句。您的代码现在应该成为:

#include <iostream>

int main(){
    int num1 = 0, num2 = 0;
    std::cout << std::endl << "Please enter two numbers to find a range between" << std::endl;
    std::cin >> num1 >> num2; 


    if (num1 < num2)
        while (num1 <= num2){
            std::cout << std::endl << num1;
            ++num1;
        }

    else if (num2 < num1)
        while (num2 <= num1){
            std::cout << std::endl << num2;
            ++num2;
        }

    else if (num1 == num2)
        std::cout << std::endl << num1;

    /* Alternatively for (num1 ==num2) use:

    else
        std::cout << std::endl << num1;     

    */

    std::cout << std::endl;
}