Appel au bete du C
wapin
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
sbareau Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
sbareau Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Appel au bete du C
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Appel privé - Guide
- Un pense-bête - Guide
- Double appel - Guide
- Signal d'appel - Forum iPhone
3 réponses
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é
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é
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
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