Appel au bete du C

Fermé
wapin Messages postés 11 Date d'inscription mardi 25 septembre 2001 Statut Membre Dernière intervention 3 septembre 2013 - 5 janv. 2002 à 13:08
sbareau Messages postés 13 Date d'inscription mardi 3 avril 2001 Statut Membre Dernière intervention 10 juin 2002 - 7 janv. 2002 à 11:23
bonjour!
on a un souci en ce qui concerne le scanf.
voici le code
#include <stdio.h>
#include "string.h"
#include "arbre.h"
#define MAX_CAR 50

main()
{
char code_taper [MAX_CAR];
int c;
int i;

while(1) {
printf(">");
strcpy(code_taper,"");
i=0;
scanf("%s",code_taper);
printf(">%s\n",code_taper);
if(strcmp(code_taper,"QUIT")==0) break;
if(strcmp(code_taper,"RUN")==0){printf("COMMANDE RUN\n");}
if(strcmp(code_taper,"LIST")==0){printf("COMMANDE LIST\n");}
if(strcmp(code_taper,"NEW")==0){printf("COMMANDE NEW\n");}
if(strcmp(code_taper,"SAVE")==0){printf("COMMANDE SAVE\n");}
if(strcmp(code_taper,"LOAD")==0){printf("COMMANDE LOAD\n");}
if(strcmp(code_taper,"END")==0){printf("COMMANDE END\n");}
}
}

lorsque nous tapons "toto" il renvoie bien ">toto"
mé si nous mettons "titi toto" il renvoie:
">titi
>>toto"
comme si l'espace jouait le role d'un séparateur de chaine.
Nous avons donc essayez d'une autre fçon pour tenter d'éviter le pb en tapant le code suivant:
#include <stdio.h>
#include "string.h"
#include "arbre.h"
#define MAX_CAR 50

main()
{
char code_taper [MAX_CAR];
int c;
int i;

while(1) {
printf(">");
strcpy(code_taper,"");
i=0;
while (c=getchar() != '\n'){
code_taper[i]=c;
i++;
}
printf(">%s\n",code_taper);
if(strcmp(code_taper,"QUIT")==0) break;
if(strcmp(code_taper,"RUN")==0){printf("COMMANDE RUN\n");}
if(strcmp(code_taper,"LIST")==0){printf("COMMANDE LIST\n");}
if(strcmp(code_taper,"NEW")==0){printf("COMMANDE NEW\n");}
if(strcmp(code_taper,"SAVE")==0){printf("COMMANDE SAVE\n");}
if(strcmp(code_taper,"LOAD")==0){printf("COMMANDE LOAD\n");}
if(strcmp(code_taper,"END")==0){printf("COMMANDE END\n");}
/*verif_valeur(code_taper); */
}
}

et dans ce cas la il renvoie des caracteres ascii ou hexadecimal.Enfin quelque chose d'incompréhenssible.

a + et merci d'avance

3 réponses

PtetreLaReponse
5 janv. 2002 à 14:44
bon j'ai peut etre la reponse à ton probleme en faite ce ke tu lui dis quand tu fais :
while (c=getchar() != '\n'){
code_taper[i]=c;
i++;
}
tu lui dis de lire en boucle dans le buffer du clavier
alors ke si tu faisais :
while (1)
{
if (kbhit() && 13 == (code_taper[i++] = getche()))
break;
}
code_taper[i-1] = '\0';
il lirait le buffer que lorsqu'une touche a ete appuyé
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
5 janv. 2002 à 22:27
scanf, prend en parametres a part les caracteres de formatage, les adresses des variables, scanf("%s",code_taper) devrait etre scanf("%s",&code_taper), si je ne me trompe cela m'etonne que la compile ne signale pas une erreur.Et de plus comme l'a dit PtreLaReponse, le dernier caractere d'1e chaine c'est '\0';
J'espere avoir repondu et n'avoir pas dit de betises car je n'utilise pas scanf, je ne le connais q de theorie, j'utilise le C++(cin>>);
Bonne annee.
tafiscobar
0
sbareau Messages postés 13 Date d'inscription mardi 3 avril 2001 Statut Membre Dernière intervention 10 juin 2002
7 janv. 2002 à 11:23
salut,
dans ton deuxieme exemple tu as declare la variable c en int.
je ne me rappelle plus du prototype de getchar mais declare c plutot en char et ca devrait eviter qu'il le cast en sa valeur ascii pour le mettre dans un int.
steph
0