我觉得我可能会在这里遗漏一些东西,但有些东西告诉我,我可能只是让它变得更加困难,但是从书中,“C ++ Primer,5th ed。”,我是坚持这个问题:
练习1.11:编写一个程序,提示用户输入两个整数。 打印由这两个整数指定的范围内的每个数字。
直到本书的这一次,所使用的唯一循环是while
循环,并且没有引入像if
这样的条件表达式。如果不是因为用户可以将值放入要求的升序或降序的整数中,那么问题就很简单了,所以简单的减法可以找到差异,但不测试哪种方式递增。
我怎样才能绝对打印数字之间的范围,保证不会在不测试数学结果的情况下和/或不比较两个数字的情况下向无穷大增加?这就是我的意思;它适用于第一个值:v1
小于或等于第二个值:v2
,但不是这样:
#include <iostream>
int main()
{
int v1 = 0, v2 = 0;
std::cout << "Enter two integers to find numbers in their range (inclusive): "
<< endl;
std::cin >> v1 >> v2;
while (v1 <= v2)
{
std::cout << v1;
++ v1;
}
return 0;
}
非常感谢任何帮助!
答案 0 :(得分:0)
这是一个简单的重写,您可以使用min
和max
来确定要迭代的范围:
#include <iostream>
int main()
{
int v1 = 0, v2 = 0;
std::cout << "Enter two integers to find numbers in their range (inclusive): " << std::endl;
std::cin >> v1 >> v2;
int current = std::min(v1, v2);
int max = std::max(v1, v2);
while (current <= max)
{
std::cout << current << std::endl;
++ current;
}
return 0;
}
这也允许您保持两个输入“完整”,因为您正在使用另一个变量来迭代这些值。
另请注意,++current
如果被current++
替换,则可以在与其打印完全相同的行上完成。后者将返回current
的当前值,然后递增它。
修改强>
以下是迈克尔建议我相信的工作代码:
#include <iostream>
int main()
{
int v1 = 0, v2 = 0;
std::cout << "Enter two integers to find numbers in their range (inclusive): " << std::endl;
std::cin >> v1 >> v2;
int increment = (v2 - v1) / std::abs(v2 - v1);
int current = v1;
int max = v2 + increment;
while (current != max)
{
std::cout << current << std::endl;
current += increment;
}
return 0;
}
答案 1 :(得分:0)
我尝试了我的业余方式并得到了结果。我希望它会有所帮助。
#include <iostream>
using namespace std;
int main()
{
int a;
int b;
int val;
cout << "Please enter small value "<< endl;
cin >> a;
cout << "Please enter bigger value than the last one " << endl;
cin >> b;
while (val>a)
{
val = --b;
cout << "The numbers between a & b are "<< val << endl;
}
return 0;
}
答案 2 :(得分:0)
因为我仍然记得 C++ Primer 中的这个问题,所以我认为他们希望您解决它的方式是使用他们为您提供的编程基础知识。 在我看来,它应该是这样解决的,如果这是本书中的确切问题:
#include <iostream>
int main()
{
int v1 = 0, v2 = 0;
std::cout << "Enter 2 numbers" << std::endl;
std::cin >> v1 >> v2;
while (v1 < v2) {
std::cout << v1 << std::endl;
++v1;
}
}