Probleme avec des if, if else et else
Résolu
Wolfye
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
arthurg95 Messages postés 2421 Date d'inscription Statut Membre Dernière intervention -
arthurg95 Messages postés 2421 Date d'inscription Statut Membre Dernière intervention -
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);
}
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);
}
A voir également:
- Probleme avec des if, if else et else
- If exist - Forum Java
- The realtek network controller was not found. if deep sleep mode is enabled please plug the cable ✓ - Forum Pilotes (drivers)
- If else batch - Forum Autoit / batch
- Else if arduino ✓ - Forum C++
- If char ✓ - Forum Programmation
2 réponses
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 :
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; }
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 ;)
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 ;)
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 ?
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 :-).
Et encore une fois, merci beaucoup ^^