0

我觉得我可能在这里遗漏了一些东西,但有些东西告诉我,我可能只是让这变得更加困难,但是从这本书“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;  
}  

任何帮助将不胜感激!

4

4 回答 4

0

您可以使用(v2-v1)/abs(v2-v1)或一些这样的增量。(前提是它们不相等)。对于循环条件,您可以检查当前数字是否仍在两者之间,例如(v1<=v && v<=v2) || (v2<=v && v<=v1).

为了避免零的情况,我将它变成do while循环并v1!=v2 && ...用作条件。

总结一下:

int v = v1;
do {
   std::cout << v << std::endl;
}while( v1!=v2 && ( (v1<=(v+=(v2-v1)/std::abs(v2-v1)) && v<=v2) || (v2<=v && v<=v1) ) );

PS我相信您可以自行解决评论和其他答案中提到的输入问题。

于 2013-01-03T20:28:00.313 回答
0

这是一个简单的重写,您可以在其中使用minmax确定要迭代的范围:

#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;  
}
于 2013-01-03T20:34:01.553 回答
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;
}
于 2016-05-07T06:12:07.993 回答
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;
    }
}
于 2021-05-24T16:03:07.753 回答