[C]

Bonjour,
j'ai un petit soucis avec ce bout de code :

" printf("\nRajouter un article......................... 1");
printf("\nNe rien ajouter............................. 0");
fflush(stdin);
printf("\n\nReponse : ");
while((x=getchar()) != '\n' && x!=EOF);
scanf("\n%d", &rep);
printf("\n");
"

Comme vous pouvez le voir j'ai tout fait pour liberer de l'espace afin que lors de lexucution du programme il ne zappe pas le scanf .
or au bout de quelques executions de ce bout de code, il arrive malgrès tout à me zapper le scanf.

quelqu'un aurait une solution radicale??

merci d'avance!

jc
Configuration: Windows Vista
Safari 525.19

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Salut,
    fflush(stdin) ne doit pas être utilisé. Son comportement est indéfini. Il faut utiliser à la place : while((c=getchar()) != '\n' && c!=EOF); comme tu as fait.
    Evite les \n dans les scanf, un simple %d.
    Voici une correction de ton programme :
    char c;
    int rep;
    
    puts("Rajouter un article......................... 1");
    puts("Ne rien ajouter............................. 0");
    printf("\nReponse : ");
    scanf("%d", &rep);
    while((c=getchar()) != '\n' && c!=EOF);
    putchar('\n');
    

    Ca devrait mieux marcher.

    Sinon pour répondre à ta question, le code que tu as donné fonctionne bien.
    Il doit y avoir une erreur ailleurs. Par exemple, que vaut T ?

    atoi permet de convertir en int le début de la chaîne entrée en arguments.

    Cdlt
    1. de la façon dont tu as tourné le message, j'aurais pensé que tu veuilles que je mette un '||' mais ça ne marche pas et c'est normal

      sinon si quelqu'un pouvait me dire quelque chose sur ce bout de code :

      printf("Entrez la quantité souhaitée..... : ");
      fgets(buff, T, stdin);
      conv = atoi(buff);

      if (conv == 0)
      {
      q=1;
      }

      le but est d'entrée une quantité et si on ne rentre rien alors la quantité se met à 1 d'office
      or même si je rentre 20, la quantité se met à 1.

      con est toujours égal à 0?
      1. Médite sur cette boucle:
        while ( (x != 1) && (x != 2));
        Qu'en penses-tu ?
        1. pas grand chose.. je vois pas à quoi tu veux en venir ?
        2. @JCPas grand chose !!
          Mais c'est une boucle dont on ne peut sortir !
          Une boucle, disons-le gentiment, une boucle absurde (à moins de vouloir bloquer un programme).
        3. @JCOh m...., je me suis gourré dans mon raisonnement.
          Pardonne-moi.
          Merci