Fonction fgets en C
Discutez d'informatique ici !
-
jujudu597
- Membre Naturel
- Messages: 87
- Enregistré le: 20 Fév 2014, 17:13
-
par jujudu597 » 05 Avr 2015, 19:48
Bonjour,
Je cherche a écrire une fonction (un peu bete) pour m'entrainer sur la fonction fgets mais je n'y arrive pas.
Je veut écrire une fonction qui mimprime "A" si je saisit "Trop grand", "B" si je saisit "Trop petit" et qui me recopie la chaine sinon.
Voici ce que j'ai fais
int main () {
char str[20];
fgets(str, 20 , stdin);
if ( str == "Trop grand" ){
printf("A \n");
}
else if ( str == "Trop petit" ) {
printf("B");
}
else {
printf("%s" , str);
}
return 0;
}
Cependant, je n'arrive jamais dans les "if".
J'aimerais savoir pourquoi.
Merci d'avance.
-
danyL
- Membre Rationnel
- Messages: 682
- Enregistré le: 03 Jan 2015, 13:29
-
par danyL » 05 Avr 2015, 20:42
jujudu597 a écrit:Bonjour,
Je cherche a écrire une fonction (un peu bete) pour m'entrainer sur la fonction fgets mais je n'y arrive pas.
Je veut écrire une fonction qui mimprime "A" si je saisit "Trop grand", "B" si je saisit "Trop petit" et qui me recopie la chaine sinon.
Voici ce que j'ai fais
int main () {
char str[20];
fgets(str, 20 , stdin);
if ( str == "Trop grand" ){
printf("A \n");
}
else if ( str == "Trop petit" ) {
printf("B");
}
else {
printf("%s" , str);
}
return 0;
}
Cependant, je n'arrive jamais dans les "if".
J'aimerais savoir pourquoi.
Merci d'avance.
bonsoir,
en C le type chaine (string) n'existe pas contrairement à d'autres langages
on passe par un tableau de caractères, comme indiqué dans la déclaration char str[20];
on ne peut pas faire de comparaison de chaines directement avec ==
il faut passer par la fonction strcmp() ou stricmp() ou strncmp() ou ...
-
jujudu597
- Membre Naturel
- Messages: 87
- Enregistré le: 20 Fév 2014, 17:13
-
par jujudu597 » 05 Avr 2015, 21:31
Merci bcp pour votre réponse. Je ne connaissait pas ses fonctions. Grace a cela, je n'ai plus de warning a la compilation. Cependant à l'execution, j'ai toujours le meme resultats, à savoir le "3eme if"
int main () {
char str[20];
fgets(str, 20 , stdin);
if ( strcmp ( str , "Trop grand" ) == 0 ){
printf("A \n");
}
else if ( strcmp ( str , "Trop petit" ) == 0 ) {
printf("B");
}
else {
printf("%s" , str);
}
return 0;
}
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 07:03
-
par ampholyte » 06 Avr 2015, 07:38
Bonjour,
Lorsque tu utilises la fonction fgets, il faut retirer le \n final de la chaine. Dans ton cas tu vas avoir la chaine suivante dans ton buffer :
str => "Trop grand\n"
Voici donc ce que tu peux faire :
- Code: Tout sélectionner
int main () {
char str[20];
char *ptr;
fgets(str, 20 , stdin);
ptr = strchr(str, '\n'); /* Renvoi la position du \n dans la chaine */
if (ptr != NULL) {
*ptr = '\0'; /* On remplace le \n par une fin de chaine */
}
if (strcmp(str , "Trop grand") == 0) {
printf("A \n");
} else if (strcmp(str , "Trop petit") == 0) {
printf("B");
} else {
printf("%s" , str);
}
return 0;
}
-
jujudu597
- Membre Naturel
- Messages: 87
- Enregistré le: 20 Fév 2014, 17:13
-
par jujudu597 » 14 Avr 2015, 11:29
Merci bcp pour votre réponse!!!
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités