Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找两个数字之间的值范围时的奇怪行为_C++ - Fatal编程技术网

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

C++ 查找两个数字之间的值范围时的奇怪行为,c++,C++,我最近开始阅读“c++入门第5版”。我目前正在进行以下练习: 练习1.11: 编写一个程序,提示用户输入两个整数。 打印这两个整数指定范围内的每个数字 我编写了以下代码作为解决方案: #include <iostream> int main(){ int num1 = 0, num2 = 0; std::cout << std::endl << "Please enter two numbers to find a range between

我最近开始阅读“c++入门第5版”。我目前正在进行以下练习:

练习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;
样本输出:

1
2
3
4
5
5
6    
我不明白的是,如果我输入的第一个数字大于第一个数字(例如num1>num2),那么程序会产生所需的结果,例如:

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


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

说清楚一点,我知道这个练习有一个更干净、正确的解决方案。我只想知道我的程序以这种方式运行的原因

我非常感谢你的解释

太简单了。 只需为底部的两个if循环添加“else”
基本上,您只需要经历1个“如果”循环,但您的程序会经历每个“如果”循环

实际上,当
的所有迭代都完成时,您会在第一个条件中增加
num1
,而
循环完成了第二个
if条件
的循环退出条件,因为这是第一个
if
的循环退出条件(即,正如Technoid所说,num1添加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;
}
#包括
int main(){
int num1=0,num2=0;
标准:cout>num2;
如果(num1而(num1)只是为了补充一些说明,如果您的程序进入第一个条件,它以
num1
始终大于
num2
结束,从而触发第二个条件。这就是我最后将其更改为的条件,感谢您的确认
#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;
}