Probleme avec des if, if else et else

Résolu/Fermé
Wolfye Messages postés 22 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 7 juillet 2013 - 7 juil. 2013 à 12:47
arthurg95 Messages postés 2399 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 - 7 juil. 2013 à 21:14
mon probleme est plutot simple, j'essai de faire un programme qui quand me demande tout d'abord d'ecrire quelque chose et qui par rapport a ce que j'ai ecrit, me repond des choses differentes... Alors ça marche tant que je n'ai que le premier if, mais dès que j'enlève le ';' a la fin du if pour que le 'else if' puisse le remarquer, il ne verifie plus du tout le premier if... et une fois que je rajoute le else aussi, il la remporte sur tous...
L'exemple est peut-etre plus parlant :

#include <stdio.h>

int main()
{
char text[10];

printf( "Write some text\n" );
scanf( "%s", text );

if ( text == "Hello" ) { /* ici j'ai donc enlevé le ';' apres la parenthese pour que le else if remarque le if, mais du fait le if n'ai même plus verifié... */
printf("it works !\n");
}

else if ( text == "Bye" ) { /* même chose ici */
printf("works with else if");
}
else {
printf( "Failed !!\n" ); /*au final, peu importe ce que j'écrit j'ai toujours cette reponse*/
}

printf("this is your text : %s \n", text);

}

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
7 juil. 2013 à 13:29
Bonjour,

Alors tout d'abord, deux choses :
1 : merci de faire usage de plus de politesse pour la prochaine fois. Le "Bonjour" placé automatiquement est justement fait pour le rappeler. Pas pour l'enlever...
2 : la prochaine fois, merci d'utiliser les balises "code" <> lorsque tu postes un code (à droite du bouton souligné).

Sinon, effectivement, la comparaison de chaîne en C, se fait avec strcmp().

if ( text == "Hello" ) { /* ici j'ai donc enlevé le ';' apres la parenthese pour que le else if remarque le if, mais du fait le if n'ai même plus verifié... */
printf("it works !\n");
}

Si tu mets un ; le if sera effectué ! Mais, l'instruction suivante ne sera pas conditionnée par le if. D'ailleurs, c'est une erreur de mettre un ; après un if. Autant le mettre en commentaire...

De plus, scanf("%s",...); c'est très dangereux. Mets plutôt : scanf("%9s", text);

Et enfin, un main() se termine par return 0;.

Ce qui donne :

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

int main(void)
{
     char text[10];
     printf( "Write some text\n" );
     scanf( "%9s", text );

     if (strcmp(text, "Hello") == 0) {
          printf("it works !\n");
     }
     else if (strcmp(text, "Bye") == 0 ) {
          printf("works with else if");
     }

     else {
          printf( "Failed !!\n" );
     }

     printf("this is your text : %s \n", text);

     return 0;
}
1
Wolfye Messages postés 22 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 7 juillet 2013
7 juil. 2013 à 13:46
Merci beaucoup de votre réponse,
Et je suis sincerement désolé d'avoir paru impoli mais je n'avais pas remarqué de bonjour automatique quand j'ai écrit m'a question. Et je suis désolé aussi d'avoir oublié les balises "code".
Pour le reste, merci de vos conseils, et si vous aviez le courage, pourriez vous m'expliquer quelle différence fait le 9 dans %9s ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
7 juil. 2013 à 13:51
Il n'y a pas de soucis, c'est pour la prochaine fois ;-).

quelle différence fait le 9 dans %9s ?
Cela limitera la saisie à 9 caractères dans ta chaîne (+1 pour le caractère '\0' final), soit la taille de ton tableau.
Sans ça, si l'utilisateur entrait une chaîne de 15 caractères, tu risquerais de faire planter le programme. Tu peux essayer pour bien comprendre l'intérêt du 9 :-).
0
Wolfye Messages postés 22 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 7 juillet 2013
7 juil. 2013 à 14:12
D'accord,
Et encore une fois, merci beaucoup ^^
0
arthurg95 Messages postés 2399 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
7 juil. 2013 à 12:55
Ajoute #include <string.h>

et la comparaison de caratère se fait rarement comme ça, on utilise plutôt des fonction de comparaison (et ce dans beaucoup de langage ;))
essaye plutôt strcmp(text, "Hello") à la place de if (text == "Hello")

Et le mieux pour vérifier ton problème est d'utiliser un débogueur, en ligne de commande c'est chiant, mais avec un bon IDE c'est assez simple ;)
0
Wolfye Messages postés 22 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 7 juillet 2013
7 juil. 2013 à 13:01
D'accord, je vais essayer ^^
0
Wolfye Messages postés 22 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 7 juillet 2013
7 juil. 2013 à 13:05
Alors, ça ne marche toujours pas...
Et j'avais oublié de préciser mais mon debugueur ne remarque pas d'erreur
0
arthurg95 Messages postés 2399 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
7 juil. 2013 à 14:24
Le débogueur n'est pas pour détecter les erreur, c'est le compilateur qui s'en charge ça, mais les vérifications de GCC sont assez limitées...
Il sert à suivre pas à pas les instructions, ainsi que l'état des variables ;)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
Modifié par fiddy le 7/07/2013 à 14:35
mais les vérifications de GCC sont assez limitées...
Peux-tu préciser ?
0
Wolfye Messages postés 22 Date d'inscription vendredi 3 août 2012 Statut Membre Dernière intervention 7 juillet 2013
7 juil. 2013 à 17:13
merci, mais c'est bon, j'ai eu ma réponse la :)
0