2017-09-02 8 views
-3

salut im un begginer c programmeur et j'essaye de faire un filtre qui est censé changer une variable en fonction de l'autre variable mais il ne semble pas changer la variable g1 pour une raison quelconque. J'apprécie vraiment toute aide que je peux obtenir car je suis coincé ici pour l'instant. Mercivariable ne change pas c

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 


int main(void) 
{ 
    int car; 
    int g1; 
    int g2; 
    int sel1; 
    unsigned int iseed = (unsigned int)time(NULL);   
    srand (iseed); 
    g1 = 0; 
    car = rand() % 3 + 1; 
    printf("%d\n",car); 

    printf("select a door beetween 1 and 3\n "); 
    scanf ("%d",&sel1); 
    if (sel1 < 0) 
    { 
     printf("Invalid selection!\n"); 
     return 0; 
    } 
    if (sel1 > 3) 
    { 
     printf("Invalid selection!\n"); 
     return 0; 
    } 

    if (sel1 == 1) 
    { 
     if(car == 1) 
     { 
      g1 = 2; 
      g2 = 3; 
     } 
     if (car == 2); 
     { 
      g1 = 3; 
      g2 = 1; 
     } 
     if (car == 3); 
     { 
      g1 = 2; 
      g2 = 1; 
     } 
    } 

    if (sel1 == 2) 
    { 
     if(car == 1) 
     { 
      g1 = 3; 
      g2 = 2; 
     } 
     if (car == 2); 
     { 
      g1 = 1; 
      g2 = 3; 
     } 
     if (car == 3); 
     { 
      g1 = 1; 
      g2 = 2; 
     } 
    } 

     if (sel1 == 3) 
    { 
     if(car == 1) 
     { 
      g1 = 2; 
      g2 = 3; 
     } 
     if (car == 2); 
     { 
      g1 = 1; 
      g2 = 3; 
     } 
     if (car == 3); 
     { 
      g1 = 1; 
      g2 = 2; 
     } 
    } 

    printf("Behind door %d is a goat\n",g1); 



    return 0; 
} 

Apparemment, je n'ai pas assez de détails alors ignorez cette im juste en ajoutant quelques détails aléatoires. En mathématiques élémentaires, une variable est un caractère alphabétique représentant un nombre, appelé valeur de la variable, qui est soit arbitraire, non entièrement spécifié, soit inconnu.

+7

'if (voiture == 2);': Supprimer ';' – BLUEPIXY

+1

En général, le débogage serait bien. Utilisez Visual Studio, c'est facile là-bas. Si vous êtes sur Linux, utilisez gdb, mais c'est beaucoup plus difficile pour un débutant. (Essayez-le cependant.) Mais vous pouvez toujours disperser 'printf's et voir le flux de contrôle dans un petit morceau de code. (Et bluepix a raison, comprenez-vous pourquoi?) –

+0

Un programme n'est * pas * un monde mathématique. Il a un état interne * changeant *. Lisez à propos de [sémantique] (https://en.wikipedia.org/wiki/Semantics_ (computer_science)) –

Répondre

0

Je remarque que vous ne spécifiez pas ce qui devrait se produire si sel1==0 Vous spesified pour sel1>3 et sel1==3 et sel1==2 et sel1==1 et sel1<0 mais vous ne spécifiez pas si sel1==0 Je pense que g1 ne change pas si SEL1 est 0, mais les changements peuvent être autrement vous devriez mettre un espace lors de l'entrée SEL1 comme ce qui suit

scanf ("%d ",&sel1); 

et retirez le ; après que les conditions if(car==2) et if(car==3)

+0

Avez-vous lu le commentaire de bluepix? Est-ce que tu as compris? –

+0

oui @PeterA.Schneider –

+0

Je demande parce que ni le sel1 == 0 unspecified pas un espace manquant dans le format 'printf' sont la raison pour laquelle le programme OP ne fonctionne pas. C'est le vide si les blocs. –

1

Tout d'abord, comme @ BLUEPIXY suggéré, vous devez supprimer le ;.

je changerais les deux premières conditions de SEL1 pour définir un seul, comme celui-ci:

if (sel1 < 1 || sel1 > 3) 
    printf("Invalid selection!\n"); 

alors j'utiliser un switch cas et if déclaration:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 


int main(void) 
{ 
    int car; 
    int g1; 
    int g2; 
    int sel1; 
    unsigned int iseed = (unsigned int)time(NULL); 
    srand(iseed); 
    g1 = 0; 
    car = rand() % 3 + 1; 
    printf("Car= %d\n", car); 

    printf("Select a door beetween 1 and 3:\n"); 
    scanf("%d", &sel1); 


    if (sel1 < 1 || sel1 > 3) 
     printf("Invalid selection!\n"); 

    switch (sel1) 
    { 
    case 1: 
     if (car == 1) 
     { 
      g1 = 2; 
      g2 = 3; 
     } 
     else if (car == 2) 
     { 
      g1 = 3; 
      g2 = 1; 
     } 
     else if (car == 3) 
     { 
      g1 = 2; 
      g2 = 1; 
     } 

     break; 

    case 2: 
     if (car == 1) 
     { 
      g1 = 3; 
      g2 = 2; 
     } 
     else if (car == 2) 
     { 
      g1 = 1; 
      g2 = 3; 
     } 
     else if (car == 3) 
     { 
      g1 = 1; 
      g2 = 2; 
     } 
     break; 

    case 3: 
     if (car == 1) 
     { 
      g1 = 2; 
      g2 = 3; 
     } 
     else if (car == 2) 
     { 
      g1 = 1; 
      g2 = 3; 
     } 
     else if (car == 3) 
     { 
      g1 = 1; 
      g2 = 2; 
     } 
     break; 
    } 


    printf("Behind door, %d is a goat\n", g1); 


    getchar(); 
    getchar(); 

    return 0; 
} 

Exemple:

enter image description here

+0

'if (sel1 < 0 || sel1 > 3)' autorise 4 possibilités quand il n'y en a que trois. Devrait être 'si (sel1 < 1 || sel1 > 3)' –

+0

J'ai édité la réponse. Merci! –

+0

Merci beaucoup Cecho ce travail parfaitement. –