2015-06-14 169 views
-6

我被困在C++中的这个非常简单的程序中,我让用户知道他/他输入的数字是否为总数,但是由于某种原因,第一圈,但在第二圈时会变得鱼腥。如果有人能帮忙,我会更高兴吗?“Prime or not”程序

#include <iostream> 
using namespace std; 

int main(int argc, const char* argv[]) 
{ 
    int number1 = 5; 
    int number; 
    int a = 0; 

    while (number1 == 5) 
    { 
     int b = 1; 
     cout << "Enter your number and we'll tell you if it's prime or not: "; 
     cin >> number; 

     while (a <= number) 
     { 
      a++; 
      if (number % a == 0) 
       b++; 
     } 

     if (b == 3) 
      cout << "Your number is prime" << endl; 
     else 
      cout << "Your number is not prime" << endl; 
    } 
} 
+3

请定义“云腥”。 – Quentin

+0

这意味着如果你在下面的循环中输入素数,那么它会打印出“它不是素数”,这就是他的腥意。 – Elyasin

回答

1

你错过了内而之前重新初始化a0

这使它工作。不过,我建议你花时间学习编码。它看起来没有受过教育。

此外您的程序不会退出。不知道你的意图是什么,但是你可以省略number1变量,并简单地使用while(1)(考虑到你的代码保持原样;尽管如此,可能你还处于开发的开始阶段)。

#include <iostream> 
using namespace std; 

int main(int argc, const char* argv[]) 
{ 

    int number1 = 5; 
    int number; 


    int a = 0; 

    while (number1 == 5) 
    { 
     int b = 1; 
     cout << "Enter your number and we'll tell you if it's prime or not: "; 
     cin >> number; 

     a = 0; <-- Reset to 0 would make it work 
     while (a <= number) 
     { 

      a++; 

      if (number % a == 0) 
       b++; 


     } 

     if (b == 3) 
      cout << "Your number is prime" << endl; 
     else 
      cout << "Your number is not prime" << endl; 
    } 
} 

P.S .:你是StackOverflow的新手。所以你可能会接受答案然后离开。请考虑接受答案。解决您的问题时,这是一种尊重的做法。

+0

考虑在while循环中移动“a”的声明,而不是仅添加其余部分。 –

+0

不确定你的意思。我只是复制了代码。变量“a”需要重置,而不是更多。我认为这对OP来说更容易,因为我相信他是初学者(看起来也像哈利波特)。 – Elyasin

+0

删除'int a = 0',然后将您的代码更改为'int a = 0; // < - 重置为0会使其工作' –

2

你的程序有几个问题。

第一个是循环开始语句

while (number1 == 5) 

是无限的,因为number1没有在循环中改变。

第二个是你必须始终在循环内初始化变量a为零。它也应该在循环中定义,因为它不在循环外部使用。这同样适用于变量number

考虑到一个数字如果可以被1和它自己除数(除了数字1),那么它就是素数。所以,我最初设置变量b为零,并与2比它更清楚,而不是将其与3

程序比较可以看看下面的方式

#include <iostream> 

int main() 
{ 
    while (true) 
    { 
     std::cout << "Enter your number and we'll tell you if it's prime or not (0-exit): "; 

     unsigned int number = 0; 
     std::cin >> number; 

     if (number == 0) break; 

     unsigned int n = 0; 
     unsigned int divisor = 0; 

     while (divisor++ < number) 
     { 
      if (number % divisor == 0) n++; 
     } 

     if (n == 2) 
      std::cout << "Your number is prime" << std::endl; 
     else 
      std::cout << "Your number is not prime" << std::endl; 
    } 
}