Problème avec scanf

salomelette Messages postés 4 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Mon programme en C semble bon mais l'environnement Geany m'indique qu'il y a un problème avec mes scanf. Je vous joins ici la photo :


Quelsu'un pourrais m'indiquer si il es possible d'arranger ça ? Et si oui, comment ?

3 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,

    Pourtant le compilateur précise le problème en rouge :-).
    Tu ignores le retour de scanf().
    Essaie : (void)scanf(...)
    Ou alors utilise l'attribut précisé par ton compilateur pour que ce dernier ne lève pas de warning dans ce cas.
    0
    1. salomelette Messages postés 4 Statut Membre
       
      Justement, le problème est que je n'ai pas compris le problème qu'il me signalait :S.
      Je vais essayer avec void. Merci :)
      0
    2. salomelette Messages postés 4 Statut Membre
       
      Ca ne marche pas toujours pas ... Il me signale toujours le même problème en rouge et je ne le comprend toujours pas ..
      0
    3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Ok. En fait scanf() et cie sont taggées avec l'attribut warn_unused_result.
      Cela signifie que si tu ne testes pas la valeur de retour, ça remonte un warning.

      Teste donc la valeur de retour du scanf() et ça devrait le faire. Par exemple :
      if ( scanf("%d",&a) == 1) {
           ...
      }
      

      Note : scanf() renvoie le nombre de variables affectées.
      0
  2. Mr-Je-pense Messages postés 15 Statut Membre 1
     
    Bonjour à tous !
    j'ai trouvé la solution:

    int c;
    do {
    c = getchar();
    } while (c != '\n' && c != EOF);


    merci à "fiddy" :)
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Il ne te reste plus qu'à déclarer c, et c'est parfait.
      Note, tu peux même faire :
      int c;
      while ( (c=getchar()) != '\n' && c != EOF );
      

      Mais cela n'a rien à voir avec la question ;-).
      0
      1. Mr-Je-pense Messages postés 15 Statut Membre 1 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        D'accord ;-)
        0
  3. Mr-Je-pense Messages postés 15 Statut Membre 1
     
    Bonjour,
    essai d'ajouter devant chaque scanf :
    
    fflush(stdin);
    

    :)

    Désolé il me parait que tu es sur linux, je pense que fflush(stdin); ne marche que sous windows..
    -1
    1. salomelette Messages postés 4 Statut Membre
       
      Tu as raison, ca ne marche pas :(
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      fflush(stdin); est à bannir. Comportement indéterminé...
      Pou vider le buffer clavier, il faut passer par une boucle while getchar() jusqu'à rencontrer le '\n' ou EOF.
      0
      1. Mr-Je-pense Messages postés 15 Statut Membre 1 > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Oui. Tu as raison. :)
        0