我最近开始研究“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
特别令人困惑的是,当我交换条件语句的顺序时,第一个例子将正常工作,第二个例子将产生不正确的输出。
为了清楚起见,我知道这个练习的清洁,正确的解决方案。我想知道我的程序以这种方式运行的原因。
我非常感谢你的解释!
答案 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;
}