Langage c comment fonction gets??

yoda -  
geotop2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -
salut a ts

je crois que la reponse sera simple mais c'est un probleme pour la quel j ai passer plus 1 heure je vais devenir fou!!
{
char *tmp=NULL;
tmp=(char*) malloc(sizeof(char)*300);
memset(tmp, '\0', sizeof(char));

printf("taper la correction\n");
gets(tmp);
n=strlen(tmp);
printf("\n n vaut %d",n);
printf("\n tmp vaut %s",tmp);
}
et la quand je l execute, apres l'affichage du printf("taper la correction\n"); , il affiche directement n vaut zero et ensuite il bug.
le gets se met en marche sans que je puisse taper quelque chose?

d'ou vien le probleme, aidez moi svp!!

merci
A voir également:

11 réponses

Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
Salut,
Je ne vois pas la déclaration de n dans le code que tu as posté.

A++

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
4
Guki
 
Salut!

N'oublie pas de vider le flux d'entrée stdin si tu appliques une boucle sur gets.
1
Ravachol Messages postés 566 Date d'inscription   Statut Membre Dernière intervention   120
 
Je viens de copier ton code et chez moi ça passe sans pb après avoir ajouté la déclaration de n.

A++

C'est pas parce qu'ils sont nombreux à avoir tort
qu'ils ont raison! (COLUCHE)
1
yoda
 
"de vider le flux d'entrée stdin si tu appliques une boucle sur gets"

voila qui a l aire interessant mais je comprend pas se que tu a dis, sa veut dire quoi ou du moin comment je fait???

j ai l impression que gets lit ce qui a dans un buffer et que le mien est deja rempli, du coup il gets autre chose!! donc je croi que je doi vider quelque chose mais comment??
(fflush???)

c'est ca que tu a voulu dire non??!!??
1
Guki
 
fflush(stdin);


;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yoda
 
pardon , il y est normalement ds la vraie version, a vrai dire la vraie version est un peu plus complexe mais je suis ur que le probleme vien des ces ligne
0
lolosynytariny
 
Bonjour,
je fai une programmation mai c ne marche po

#include <string.h>
#include <stdio.h>

typedef enum{Printemps,Ete,Automne,Hiver}Saison;
typedef enum{janvier, fevrier, mars, avril, mai, juin, juillet, aout, septembre, octobre, novembre, decembre}Mois;

int main(void){
Saison s;
Mois m;
char moi[10];
printf("Introduire un mois:");
gets(moi);
printf("");

if ( (moi=="janvier")|| (moi=="JANVIER") ) m=janvier;
if ( (moi=="fevrier") ||(moi=="FEVRIER") ) m=fevrier;
if ( (moi=="mars")|| (moi=="MARS") ) m=mars;
if ( (moi=="avril")|| (moi=="AVRIL") ) m=avril;
if ( (moi=="mai")|| (moi=="MAI") ) m=mai;
if ( (moi=="juin") ||(moi=="JUIN") ) m=juin;
if ( (moi=="JUILLET")|| (moi=="juillet") ) m=juillet;
if ( (moi=="aout")||(moi=="AOUT") ) m=aout;
if ( (moi=="SEPTEMBRE")|| (moi=="septembre") )m=septembre;
if ( (moi=="octobre")|| (moi=="OCTOBRE") ) m=octobre;
if ( (moi=="NOVEMBRE")|| (moi=="novembre") ) m=novembre;
if ( (moi=="decembre")|| (moi=="DECEMBRE") ) m=decembre;

else printf("ERREUR");

switch(m){

case janvier :
case fevrier :
case mars : printf("c'est la saison d'hiver");break;
case avril :
case mai :
case juin :printf("c'est la saison du printemps");break;
case juillet:
case aout :
case septembre: printf("c'est la saison d'été");break;
case octobre :
case novembre :
case decembre:printf("c'est la saison d'automne");
}
return ;
}
0
skay
 
En C le switch case ne fonctionne pas avec des char, le test ne s'effectue que sur un entier il me semble...
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > skay
 
Salut,

pour l'info

On peut utliser :
- les entiers
- les caractères
- les énumérations

Dans son cas il s'agit d'une énumération
0
cm-t
 
peu etre essay de mettre des break; a chaque nouvelles saison dans ton switch
0
cm-t
 
oué euh, en fait oubli ça.
-_-t
0
Sans pseudo
 
Essaye de mettre des "struct" entre "typedef" et "ennum"
0
xax
 
on vous a jamais expliquer qu'ils faut jamais utilisé gets ca provoque des buffer overflow !!!
essayer de mettre une chaine de caractère plus longue que l'espace alouer, il va pas aimer du tout ca votre programme (en plus l'espace alouer n'est pas forcement vide car tu utilise malloc du coup du peut avoir des caracère bizzard dans ton chaine entrée)
0
geotop2013 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
La comparaison entre les chaines pour le mois est fausse.
Voici le code corrigé:

if (( strcmp(moi,"janvier") == 0) || (strcmp(moi,"JANVIER")==0) ) m=janvier;
else if ( (strcmp(moi,"fevrier")==0) || (strcmp(moi,"FEVRIER")==0) ) m=fevrier;
else if ( (strcmp(moi,"mars")==0)|| (strcmp(moi,"MARS")==0) ) m=mars;
else if ( (strcmp(moi,"avril")==0)|| (strcmp(moi,"AVRIL")==0) ) m=avril;
else if ( (strcmp(moi,"mai")==0) || (strcmp(moi,"MAI")==0 )) m=mai;
else if ( (strcmp(moi,"juin")==0) || (strcmp(moi,"JUIN")==0) ) m=juin;
else if ( (strcmp(moi,"JUILLET")==0) || (strcmp(moi,"juillet")==0) ) m=juillet;
else if ( (strcmp(moi,"aout")==0) || (strcmp(moi,"AOUT")==0) ) m=aout;
else if ( (strcmp(moi,"SEPTEMBRE")==0)|| (strcmp(moi,"septembre")==0) ) m=septembre;
else if ( (strcmp(moi,"octobre")==0) || (strcmp(moi,"OCTOBRE")==0) ) m=octobre;
else if ( (strcmp(moi,"NOVEMBRE")==0) || (strcmp(moi,"novembre")==0) ) m=novembre;
else if ( (strcmp(moi,"decembre")==0) || (strcmp(moi,"DECEMBRE")==0) ) m=decembre;
else printf("ERREUR");
0