Fonction fgets en C

Discutez d'informatique ici !
jujudu597
Membre Naturel
Messages: 87
Enregistré le: 20 Fév 2014, 17:13

Fonction fgets en C

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 m’imprime "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 m’imprime "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;
}

Avatar de l’utilisateur
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!!!

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite