compilation C sous bash - C - Programmation
Marsh Posté le 09-09-2007 à 12:53:56
scanf c'est le mal
pourquoi "sous bash" ?
Marsh Posté le 09-09-2007 à 13:08:52
nick_08 a écrit : Salut tout le monde |
C'est un cas classique du problème scanf. La fonction scanf attend une entrée au format demandé, à savoir dans ton cas un caractère. Donc que se passe-t-il quand tu tapes au clavier ta réponse => tu tapes <le caractère> + <return>.
Donc le buffer input (associé au clavier) contient 2 choses => le caractère tapé ET le return
La fonction scanf récupère l'élément demandé, à savoir le caractère qui disparait du buffer MAIS il reste le "return". Lors du 2° scanf, le buffer n'étant pas vide, la fonction se contente de récupérer ce qui reste à savoir le <return>
Comment pallier à ce problème => 2 solutions
1) rajouter "getchar()" juste après le scanf pour éliminer ce "return"
2) comme le dit zecrazytux, ne pas passer par "scanf" (qui n'est PAS faite pour une saisie humaine) mais passer par fgets(). La différence, c'est que fgets() attend une chaîne entière et non un simple caractère. Donc quand elle va lire le buffer input, elle va lire et purger tout ce qui s'y trouve jusqu'au return final. En sortie, tu te retrouves avec une chaîne qu'il te suffit de passer par sscanf pour en extraire le caractère attendu. Et ainsi 1) t'as ton caractère et 2) ton buffer est clean
#include <stdio.h> |
PS: Tu ne travailles pas en C sous bash. Tu travailles avec un terminal sous environnement bash et, avec cet environnement qui te permet de travailler, tu édites et compiles et exécute un code C
Marsh Posté le 09-09-2007 à 12:51:05
Salut tout le monde
Ces derniers jours je travaille sur le programme C sous le shell bash
Mon problème est le suivant :
Lors de l’exécution d’un programme du genre :
<code>
#include <stdio.h> int main(){ char num; printf("Donner votre num: " ); scanf("%c",&num); printf("Votre num est: %c ",num); printf("Donner votre code: " ); scanf("%c",&num); printf("Votre code est: %c ",num); return 0; }
< /code>
Lorsque je donne la première entrée et je click sur entrée le programme s’exécute entièrement et il ne me demande plus de saisir l’autre valeur
Il affiche une sortie du genre :
Donner votre num:
(la je donne la valeur f par exemple)
Votre num est: f Donner votre code: Votre code est: