2010-09-27 2 views
3

Привет, я пытаюсь сделать функцию на C++, которая принимает число i и решает, является ли это простым числом или нет, пропустив цикл, чтобы найти его кратные, а затем убедитесь, что он не является простым через серию тестов. Тем не менее, кажется, что цикл даже не проходит. Я сказал, что он выводит вне зависимости от того, где он находится в цикле, но я не получаю никаких выходов. Вот код:Пока цикл, кажется, ничего не делает?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int j =1; 
    int z = 0; 
    int i = 10; 
    bool p = false; 
    while (p = false){ 
     cout << "not starting ifs"; 
     z=i%j; 
     if (z==0 && j>2){ 
     p=true; 
     cout << "not prime" << endl << "loops to if"; 
     } 
     else if (j==1){ 
      j++; 
      cout <<"loops to else if 1"; 
      } 
     else if (i==2 || j==i){ 
      p = true; 
      cout << "prime" << endl << "loops to else if 2"; 
      } 
      else { 
      j++; 
      cout << "loops to else"; 
       } 
     } 
      return 0; 
} 

Меня не волнует, или нет математики за это правильно, я хочу, чтобы понять, что из себя за опыт. Но если бы кто-нибудь мог помочь мне понять это с хорошим понятным объяснением, я был бы признателен! Я "м действительно новым для программирования, так что я не привык к жаргоне пока я с нетерпением жду ваших советов

ответ

10

вы используете = вместо == в

while (p = false){ 

Когда вы сделаете это, вы назначаете false к p и результат выражения false который проходит тестирование в while, что приводит к выходу из цикла.

+0

Хорошо! Это исправило это! Спасибо!!!! – samuraiseoul

+0

Samuraisoulification - не забудьте принять любой ответ, с которым вы пошли! – n00dle

+0

Также спасибо за объяснение !! – samuraiseoul

3
while (p = false) // obvious error ... 

Если вы не можете найти его:.! Это == не =, что вы хотите

.
3

изменить его в то время как (false == p)

В основном здесь то, что происходит в следующем порядке:

  1. р назначен ложным
  2. р преобразуется в BOOL

Когда говорит (p = false), «p» присваивается значение «false». После этого булевское условие цикла while проверяет значение «p», которое теперь false, и цикл никогда не вводится.

3

Поскольку ваш компилятор не кажется, предупреждает вас об этом, вы должны либо узнать, как включить предупреждение, или узнать привычку использовать «Йод-условие»:

while (false = p) 

будет вызывают ошибку компиляции.

+0

Условия yoda ужасны с точки зрения удобочитаемости. Гораздо лучше здесь 'while (! P)'. –

+0

@Alexandre: достаточно справедливо для булевых, но в целом моя точка стоит. Если вы не можете заставить компилятор предупредить вас, вы должны запрограммировать защиту. –

+0

Хорошо, я пойду учись на них! Спасибо за совет! – samuraiseoul

3

Вам необходимо изменить while (p = false) на while (p == false).

Пояснение: В C/C++ = присваивает свойство, тогда как == сравнивает значения. Здесь вы в основном делаете назначение false на p. Затем цикл while проверяет значение выражения, которое равно p, что равно false, поэтому не запускается.

8

еще лучше,

while(!p) 

В конце концов, это то, что оператор для.

Смежные вопросы