IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Boucler un programme (while)


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut Boucler un programme (while)
    Salut à tous,

    J'ai un souci dans un petit programme que je voulais faire, je n'arrive pas à boucler le programme pour qu'il se repête suivant que l'on entre O (oui) ou N (non), voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
     
    int main()
     
    {
        int i, n;
        int nb_cherche=0;
        int T[10];
        int continuer=0;
        char c;
        srand(time(NULL));
        /*MISE EN PLACE D UNE CONDITION BOOLEENNE DE RELANCE DE PROGRAMME*/
     
        while(!continuer)
     
        {
          /*REMPLISSAGE DU TABLEAU AVEC DES NOMBRES ALEATOIRES*/
          printf("\nRemplissage du tableau...\n");
          for(i=0 ; i<10 ; i++)
          {
    	T[i] = (rand() % 10) + 1;
    	printf("La case n°%i a prit la valeur : %i\n", i, T[i]);
          }
          /*DEMANDE DE LA VALEUR A RECHERCHER*/
          printf("Entrez la valeur a rechercher dans le tableau : ");
          scanf("%i", &n);
          printf("Recherche de votre valeur...");
          /*ALGO DE RECHERCHE*/
          for(i=1 ; i<=10 ; i++)
          {
    	if(T[i] == n)
    	{
    	  nb_cherche = i+1;
    	  printf("Valeur trouvee en position : %i\n", nb_cherche);
    	}
          }
          if(nb_cherche==0)
          {
    	printf("La valeur n'a pas ete trouvee dans le tableau\n");
          }
          /*BOOLEEN DE RELANCE DU PROGRAMME*/
          do
     
          {
    	printf("Voulez vous continuer ? (O (oui), N (non)) : ");
    	scanf("%c", &c);
    	printf("Vous avez repondu : %c", c);
     
    	if(c == 'O')
    	{
    	  continuer = 0;
    	  printf("Le programme se relance...");
    	}
     
    	else
     
    	  continuer = 1;
     
          }
          while(c != ('O' || 'N'));
     
     
        }
        printf("FIN");
     
      return 0;
    }
    Et ca ne marche pas, le programme ne lit pas la valeur du caractère tapé...

    Une idée ? Merci =)

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 970
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 970
    Par défaut
    Hoa,

    Je n'ai pas épluché le reste, mais à ton avis, que fait ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          while(c != ('O' || 'N'));
    ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Mmmh .. Tant que la variable c est différente du caractère O ou du caractère N ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Donc tant que çà, alors répéter le do.. Non ?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Tant que la variable c est différente du caractère O ou du caractère N ?
    Non. L'expression entre parenthèses sera évaluée en premier tout d'abord (résultat d'un OU), puis le résultat comparé à "c".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(c != ('O' || 'N') );
    est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(c != ( 1 || 1 ) );
    et donc à :

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    D'accord =) ;
    Donc pour tester entre deux caractères, comment on s'y prend ? sans parenthèse ? ou alors du type :

    TantQue c != 'O' OU c != 'N'

    ?

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    TantQue c != 'O' OU c != 'N'
    Cela fera une boucle infinie.
    Il faut boucler tant que la valeur de "c" ne correspond pas à l'une des deux valeurs possibles, c'est-à-dire tant que sa valeur est à la fois différente de 'O' et de 'N'. Il faut donc utiliser le "ET" et non le "OU".

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    J'ai vu une autre erreur aussi :

    Un tableau commence à la position 0. Avec "i" qui vaut 10, tu débordes du tableau.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    D'accord =); J'te remercie bien

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Mais en fait a la fin, pour la condition, j'ai toujours le message qui demande de continuer ou non, qui s'affiche deux fois. Pourquoi ?

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    C'est normal, il faut vider le buffer clavier après le "scanf".

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    scanf("...");
    getchar();
    Ca va ?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 35
    Par défaut
    Et d'où vient ce problème du buffer clavier ? Enfin, pourquoi ca ne marche pas dans ce cas là ?

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    C'est à cause de l'appui sur la touche ENTER, cela rajoute des caractères dans le buffer.
    Voilà comment vider le buffer : http://c.developpez.com/faq/?page=cl...buffer_clavier

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/12/2010, 11h49
  2. Réponses: 1
    Dernier message: 10/02/2008, 20h13
  3. [MySQL] While qui ne fait que boucler
    Par helene38250 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 08/08/2007, 12h29
  4. Réponses: 9
    Dernier message: 30/05/2006, 18h44
  5. Réponses: 6
    Dernier message: 28/04/2006, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo