【问题标题】:C++ do while not loopingC++ do while 不循环
【发布时间】:2016-09-23 18:06:37
【问题描述】:

我知道我可以只使用 for 循环来定义质数,但在我将 for 循环用于该主题之前,我有一个想法,我可能可以使用 while 循环或 do-while 来制作一个。 不知何故,我的 do-while 循环似乎无法正常工作。

我的理论是,我可以找到素数来检查除数的余数,其中除数不断减少 1 直到除数达到 1。(虽然“直到除数达到 1。”部分不在代码中,但我假设余数为在除数低于 0 之前,无论如何都会出现 0。)

但是,它会在余数达到 0 之前一直停止。 我做错了什么? 我什至都尝试过而不是(remainder<1 && remainder!=1)below,但仍然没有运气。

while (remainder<1)
 while (remainder==1)

#include <iostream>
using namespace std;
int main()
{
    int number, divisor, remainder;
    cin >> number;
    divisor=number-1;
    cout << "You've put " << number << ".\n";
    do {
      divisor = divisor - 1;
      remainder=number%divisor;
    }
    while (remainder<1 && remainder!=1);
    cout << divisor << "  "  << remainder << "  " << number << "  "  << "Divisor, remainder, number\n";
    return 0;
}

【问题讨论】:

  • 我认为这是倒退:number=divisor-1 应该是divisor=number-1。
  • 第二个条件隐含在第一个条件中。如果remainder 小于 1,它显然不是 1
  • 我想你想要的条件是while(divisor &gt; 1 &amp;&amp; remainder != 0)
  • @Barmar 感谢您告诉我。
  • 我还原了问题中的代码。解决方案应该放在答案中,问题需要保留损坏的代码,以便读者可以看到问题是什么以及如何解决。

标签: c++ c++11 while-loop do-while


【解决方案1】:

首先,您的变量赋值有误。这一行:

number = divisor - 1;

应该是:

divisor = number - 1;

while() 条件应该是while (remainder != 0),这样只要您没有找到除数,循环就会不断重复。如果你想更明确,你可以使用while (divisor &gt; 1 &amp;&amp; remainder != 0)。 divisor == 1 不需要重复,因为它是所有整数的除数。

【讨论】:

  • 我错过了什么吗?我的意思是,我的问题得到了完美的回答,但我仍然不明白。在我的工作中,除数不断减少 1,如果循环继续,余数将达到 0。我认为 while(divisor > 1 && remaining != 0) 会立即停止循环,因为除数大于 1 并且在 do 执行一次后余数不能为 0。
  • 最终divisor 将变为1。每个整数都可以被 1 整除,所以当这种情况发生时,remainder 将是 0,并且循环将停止。
  • 所以,在我看来,'while(divisor >= 1 && remaining == 0)' 听起来不错,但这确实会以某种方式停止循环。
  • 是因为我使用了do-while吗?如果只是while循环,我可能是正确的?
  • 你仍然有它倒退。应该是&amp;&amp; remainder != 0。
猜你喜欢
  • 2018-05-09
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多