compilation C sous bash

compilation C sous bash - C - Programmation

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:

Reply

Marsh Posté le 09-09-2007 à 12:51:05   

Reply

Marsh Posté le 09-09-2007 à 12:53:56    

scanf c'est le mal
pourquoi "sous bash" ?


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 09-09-2007 à 13:07:12    

je suis obligé cher ami je travail sous un serveur ssh

Reply

Marsh Posté le 09-09-2007 à 13:08:52    

nick_08 a écrit :

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:


 
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>
int main()
{
   char num;
   char string[1024];
   printf("Donner votre num: " );
   fgets(string, 1024, stdin);
   sscanf(string, "%c",&num);
   printf("Votre num est: %c ",num);
 
   printf("Donner votre code: " );
   fgets(string, 1024, stdin);
   sscanf(string, "%c",&num);
   printf("Votre code est: %c ",num);
   return 0;
}


 
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


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed