Fscanf besoin d'aide
taz
-
carkiasis Messages postés 67 Statut Membre -
carkiasis Messages postés 67 Statut Membre -
bonjour a tous,
voici un moment que je n'arrive plus a avancer dans mon code et je me permet de vous demander de l'aide.
voici mon code :
la condition -if ne semble jamais remplie.
Sauriez-vous ou je me trompe ?
voici un moment que je n'arrive plus a avancer dans mon code et je me permet de vous demander de l'aide.
voici mon code :
char * mot;
FILE * f;
f = fopen ("test","r");
while (!(feof(f)))
{
fscanf (f , "%s", &mot);
if (mot == "bonjour") printf("ca marche");
}
close(f);
la condition -if ne semble jamais remplie.
Sauriez-vous ou je me trompe ?
3 réponses
L'erreur vient du fait (je pense) que tu ecris ceci :
Tu ne compares pas 2 chaines de caractères mais l'adresse d'un pointeur (la variable mot) avec une chaine de caractères.
Donc forcement, ca ne marchera jamais...
Il faut donc utiliser strcmp :
Voici comment s'utilise cette fonction (à lire imperativement sous peine de surprises...) :
http://www.cplusplus.com/reference/cstring/strcmp/
Voila. Bonne et heureuse année à tous.
Carkiasis.
if (mot == "bonjour")
Tu ne compares pas 2 chaines de caractères mais l'adresse d'un pointeur (la variable mot) avec une chaine de caractères.
Donc forcement, ca ne marchera jamais...
Il faut donc utiliser strcmp :
if (!strcmp(mot , "bonjour"))...
Voici comment s'utilise cette fonction (à lire imperativement sous peine de surprises...) :
http://www.cplusplus.com/reference/cstring/strcmp/
Voila. Bonne et heureuse année à tous.
Carkiasis.
voici l'évolution de mon code :
moi ça ne m'aide pas plus, bien que j'ai l'impression d'avoir pris des précuations en plus.
une idée?
char * mot;
FILE * f;
mot = malloc(100);
f = fopen("test","r");
fscanf(f,"%s",mot);
fclose(f);
if (strcmp(mot,"bonjour") == NULL) ... // reponse du compilo : attention : comparaison entre un pointeur et un entier
moi ça ne m'aide pas plus, bien que j'ai l'impression d'avoir pris des précuations en plus.
une idée?
Ceci est faux :
La fonction renvoie 0 quand les deux chaines sont identiques et non pas NULL ou je ne sais quel autre pointeur... (le warning de ton compilateur vient de la, comparaison entre ce que renvoie strcmp (entier) et NULL (pointeur).
La solution est comme je l'ai écrite précedemment:
Autrement dit :
Il ne faut pas avoir peur d'aller voir les documentations... Ca évite bien des problèmes...
if (strcmp(mot,"bonjour") == NULL)
La fonction renvoie 0 quand les deux chaines sont identiques et non pas NULL ou je ne sais quel autre pointeur... (le warning de ton compilateur vient de la, comparaison entre ce que renvoie strcmp (entier) et NULL (pointeur).
La solution est comme je l'ai écrite précedemment:
if (!strcmp(mot,"bonjour"))
Autrement dit :
if (strcmp(mot,"bonjour")==0)
Il ne faut pas avoir peur d'aller voir les documentations... Ca évite bien des problèmes...