2010-09-27 24 views
3

Salut là j'essaye de faire une fonction en C++ qui prend un nombre, je, et décide si c'est un nombre premier ou pas en courant dans une boucle pour trouver ses multiples, et puis s'assure qu'il n'est pas premier à travers une série de test. Cependant, il semble que la boucle ne soit même pas parcourue. Je lui ai dit de sortir n'importe où dans la boucle, mais je n'ai pas de sortie. Voici le code:Alors que la boucle, ne semble pas faire quoi que ce soit?

#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; 
} 

Je ne me soucie pas si oui ou non les mathématiques derrière il est juste, je veux comprendre que moi-même pour l'expérience d'apprentissage. Mais si quelqu'un pouvait m'aider à comprendre cela avec une bonne explication facile à comprendre, je l'apprécierais! Je "suis vraiment nouveau à la programmation, donc je ne suis pas habitué à le jargon mais je me réjouis de vos conseils

Répondre

10

vous utilisez = au lieu de == dans

while (p = false){ 

Quand vous faites cela, vous attribuez false-p et le résultat de l'expression est false qui est testé dans le while boucle entraînant la sortie de la boucle.

+0

Très bien! Cela l'a réparé! Merci beaucoup!!!! – samuraiseoul

+0

Samuraisoulification - n'oubliez pas d'accepter la réponse avec laquelle vous êtes allé! – n00dle

+0

Merci aussi pour l'explication !! – samuraiseoul

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

Si vous ne trouvez pas.! Il est == pas = que vous voulez

.
3

changement à tout (false == p)

Fondamentalement, voici ce qui se passe dans l'ordre:

  1. p est attribué faux
  2. p est converti en bool

Lorsque vous dit (p = false), La valeur 'faux' est affectée à 'p'. Après cela, la condition booléenne de la boucle while teste la valeur de 'p' qui est maintenant false, et la boucle n'est jamais entrée.

3

Étant donné que votre compilateur ne semble pas vous avertir à ce sujet, vous devez soit savoir comment activer l'avertissement, ou d'apprendre l'habitude d'utiliser « Yoda conditions »:

while (false = p) 

sera provoquer une erreur de compilation.

+0

Les conditions de yoda sont terribles du point de vue de la lisibilité. Beaucoup mieux ici est 'while (! P)'. –

+0

@Alexandre: Assez juste pour les booléens, mais en général mon point de vue. Si vous ne parvenez pas à obtenir l'avertissement du compilateur, vous devez programmer de manière défensive. –

+0

D'accord, je vais apprendre sur eux! Merci pour le conseil! – samuraiseoul

3

Vous devez remplacer le while (p = false) par while (p == false).

Explication: En C/C++, = affecte une propriété, tandis que == compare les valeurs. Ce que vous faites ici, c'est d'assigner false à p. La boucle while vérifie alors la valeur de l'expression, qui est p, ce qui correspond à false et ne s'exécute donc pas.

8

Mieux encore,

while(!p) 

Après tout, c'est ce que l'opérateur est pour.