Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3023 connectés 

  FORUM HardWare.fr
  Programmation
  C

  compilation C sous bash

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

compilation C sous bash

n°1609797
nick_08
Posté le 09-09-2007 à 12:51:05  profilanswer
 

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:

mood
Publicité
Posté le 09-09-2007 à 12:51:05  profilanswer
 

n°1609798
zecrazytux
Posté le 09-09-2007 à 12:53:56  profilanswer
 

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


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1609799
nick_08
Posté le 09-09-2007 à 13:07:12  profilanswer
 

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

n°1609800
Sve@r
Posté le 09-09-2007 à 13:08:52  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  compilation C sous bash

 

Sujets relatifs
entrer du texte au clavier sans l'afficher, sous bash.Erreur de compilation d'un modele simulink en mode Accelerator
Compilation: probleme ajout de librairiescompilation sous vista 64 d'un exe pour windows XP
Compilation 64-bit avec gcc sous Windows problème de compilation
[VB]Compilation dynamique avec ressource intégré[resolut] Probleme de compilation avec QtXml
probleme de compilationCompilation sous vb .net
Plus de sujets relatifs à : compilation C sous bash


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR