cs_fab30
Messages postés48Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention 9 août 2009
-
22 avril 2004 à 07:22
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 2004
-
24 avril 2004 à 10:02
Bonjour, je travaille avec Dev c++ et lorsque que fait un prog contenant un gets dans un switch case ou dans une fonction appelée depuis un switch case, et bien le gets se fait sauter et le compilateur passe directement a la ligne en dessous !!! pourquoi ?
Exemple :
int main(){
char * texte;
int choix;
printf("Veuillez taper un texte : ");
// le gets marche
gets(texte);
while (choix!=0){
system("cls");
printf(" 1 ) Fonction 1\n");
printf(" 2 ) Fonction 2\n");
printf(" 0 ) Sortie 2\n");
scanf("%d", &choix);
switch (choix){
case 1 : printf("Veuillez taper un texte : ");
// le gets ne marche pas
gets(texte);
Fonction1();
break;
case 2 : Fonction2();
case 0 : printf("Fin du programme\n");
break;
default : printf("erreur de saisie");
}
}
system("PAUSE");
return 0;
}
frdestroyers27
Messages postés93Date d'inscriptionmardi 27 mai 2003StatutMembreDernière intervention19 avril 2008 22 avril 2004 à 08:06
Si je me souvient bien c'est pas une bonne idee d'utiliser un
gets apres avoir utiliser un scanf si tu doit le faire quand meme...essaie de mettre un gets() null exemple
gets();
gets(texte);
cs_djl
Messages postés3011Date d'inscriptionjeudi 26 septembre 2002StatutMembreDernière intervention27 novembre 20047 22 avril 2004 à 08:32
attend, texte c'est un pointeur sur un caractere, tu ve saisir koi dessus? faut allouer, mais fait plutot un tableau statique, dynamique ca sert a rien pour une poigné d'octet
oubli pas fflush(stdout) avant une saisie, et pas de commentaires "//" en c ansi, utilise /* */
#include <stdio.h>
int main(){
char texte[200];
int choix;
printf("Veuillez taper un texte : ");
fflush(stdout);
scanf("%s",texte);
while (choix!=0){
system("cls");
printf(" 1 ) Fonction 1\n");
printf(" 2 ) Fonction 2\n");
printf(" 0 ) Sortie 2\n");
scanf("%d", &choix);
switch (choix){
case 1 : printf("Veuillez taper un texte : ");
fflush(stdout);
scanf("%s",texte);
Fonction1();
break;
cs_fab30
Messages postés48Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention 9 août 2009 22 avril 2004 à 10:52
En fait, j'ai pas besoin d'allouer la memoire pour char * texte, c le fait pour moi (ca marche bien). Je veux absolument utiliser un gets parce qu'il permet la saisie des espaces alors que scanf ne le fais pas. Par contre, je suis particulierement interressé par fflush(stdout); elle fait quoi exactement ? elle vide le buffer ?
----fab30----
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_fab30
Messages postés48Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention 9 août 2009 23 avril 2004 à 06:56
Et bien, apres avoir fais un fflush(stdout), j'ai un message d'erreur. Alors j'ai essayé le fflush(stdin) et la mon probleme s'est reglé. C'est pas le fflush(stdout) qui a un effet indefini ?
cs_fab30
Messages postés48Date d'inscriptionvendredi 14 juin 2002StatutMembreDernière intervention 9 août 2009 24 avril 2004 à 08:59
Bien sur que je comprend que c'est juste un pointeur de caractere. Normalement, il pointe vers la premiere lettre de ma chaine de caractere. Je ne fais pas de malloc parce qu'il me semblait que gets le faisait implicitement. Pour le fflush, tu a vu mon code source, et je vais suivre tes conseils, a savoir ne pas utiliser de scanf pour afficher que du texte, et l'utiliser a la place de mon gets pour la saisi de chaine de caractere. Seulement, si j'ai choisi d'utiliser un gets plutot qu'un scanf pour la saisi de caracteres, c'est qu'avec le gets l'utilisateur peut saisir le caractere espace, alors qu'avec le scanf c'est impossible. As tu une solution pour remedier a cela ?
----fab30----