Probleme questionnaire en C
Fermé
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
-
12 déc. 2009 à 17:35
yous78200 Messages postés 16 Date d'inscription samedi 12 décembre 2009 Statut Membre Dernière intervention 13 décembre 2009 - 13 déc. 2009 à 18:40
yous78200 Messages postés 16 Date d'inscription samedi 12 décembre 2009 Statut Membre Dernière intervention 13 décembre 2009 - 13 déc. 2009 à 18:40
A voir également:
- Probleme questionnaire en C
- Tableau de dépouillement questionnaire - Forum Excel
- Le veston ensorcelé questionnaire corrigé pdf ✓ - Forum MacOS
- Convertir questionnaire google form en word - Forum LibreOffice / OpenOffice
- Comment télécharger un questionnaire google form - Forum PDF
- &Quot;Le veston ensorcelé" de Dino Buzzati ✓ - Forum Loisirs / Divertissements
28 réponses
Dora The Explorer
Messages postés
2811
Date d'inscription
mardi 4 septembre 2007
Statut
Contributeur
Dernière intervention
1 septembre 2011
853
12 déc. 2009 à 18:37
12 déc. 2009 à 18:37
Salut !
Pas un expert, mais voilà:
a priori il n'est pas possible en C de comparer deux chaines comme ça:
if (chaine == "blablabla")
Il faudrait passer par la fonction strcmp (string compare):
Avec ton programme:
Si quelqu'un de plus pédagogue (et qualifié ;)) traine dans le coin, qu'il ne se gêne pas.
EDIT: strcmp et ici en bas de page.
Pas un expert, mais voilà:
a priori il n'est pas possible en C de comparer deux chaines comme ça:
if (chaine == "blablabla")
Il faudrait passer par la fonction strcmp (string compare):
if (strcmp (chaine, "blablabla") == 0)
Avec ton programme:
#include <stdlib.h> #include <stdio.h> #include <string.h> // pour utiliser strcmp, il faut inclure string.h int main() { int question1=0; char reponse[100] = ""; // j'ai initialisé le tableau printf("question1:quelle est la capitale de la France\n"); // j'ai rajouté un \n scanf("%s", reponse); // tu avais mis &reponse if (strcmp(reponse, "Paris") == 0) //on fait comparer la chaine reponse avec "Paris" { question1=1; } printf("%d", question1); return 0; }
Si quelqu'un de plus pédagogue (et qualifié ;)) traine dans le coin, qu'il ne se gêne pas.
EDIT: strcmp et ici en bas de page.
Dora The Explorer
Messages postés
2811
Date d'inscription
mardi 4 septembre 2007
Statut
Contributeur
Dernière intervention
1 septembre 2011
853
12 déc. 2009 à 19:02
12 déc. 2009 à 19:02
Essaye avec:
strcmp renvoie 0 quand les chaines sont identiques.
On compare la réponse de l'utilisateur avec Paris et paris.S'il a rentré l'un OU l'autre (donc si strcmp renvoie 0 dans le premier test ou le dans second), on continue à l'intérieur du if (et question1 vaut 1).
Tu ne pouvais pas comparer comme ça:
parce que chaine est un pointeur sur la première case du tableau.
if (strcmp(reponse, "Paris") == 0 || strcmp(reponse, "paris") == 0)
strcmp renvoie 0 quand les chaines sont identiques.
On compare la réponse de l'utilisateur avec Paris et paris.S'il a rentré l'un OU l'autre (donc si strcmp renvoie 0 dans le premier test ou le dans second), on continue à l'intérieur du if (et question1 vaut 1).
Tu ne pouvais pas comparer comme ça:
if (chaine == "Paris")
parce que chaine est un pointeur sur la première case du tableau.
shareaza15
Messages postés
667
Date d'inscription
samedi 16 mai 2009
Statut
Membre
Dernière intervention
11 mai 2010
26
12 déc. 2009 à 17:40
12 déc. 2009 à 17:40
je crois que tu devrais mettre une variable au lieu de "paris dans cette ligne
if(reponse==Paris)
c a dire
if(reponse==paris)
Paris etant une variable contenant "paris"
if(reponse==Paris)
c a dire
if(reponse==paris)
Paris etant une variable contenant "paris"
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 17:45
12 déc. 2009 à 17:45
merci mais j'ai déjà essayé sa ne change rien
sinon aurez tu d'autre proposition
sinon aurez tu d'autre proposition
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
shareaza15
Messages postés
667
Date d'inscription
samedi 16 mai 2009
Statut
Membre
Dernière intervention
11 mai 2010
26
12 déc. 2009 à 17:49
12 déc. 2009 à 17:49
Peut etre aurais tu du ecrire
"reponse[]"
au lieu de
"reponse"
"reponse[]"
au lieu de
"reponse"
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 17:52
12 déc. 2009 à 17:52
j'ai déjà essayé aussi sa ne change pas
shareaza15
Messages postés
667
Date d'inscription
samedi 16 mai 2009
Statut
Membre
Dernière intervention
11 mai 2010
26
12 déc. 2009 à 17:57
12 déc. 2009 à 17:57
Supprime la ligne entre if et {et verifie tes inclusions
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 18:00
12 déc. 2009 à 18:00
Ah oui dsl en retapant le texte j'ai fais un espace de trop mais dans le programme il n'y a pas de ligne.Donc toujours pas de solution?
shareaza15
Messages postés
667
Date d'inscription
samedi 16 mai 2009
Statut
Membre
Dernière intervention
11 mai 2010
26
12 déc. 2009 à 18:25
12 déc. 2009 à 18:25
Desolé le C est un langage qui m'a bien cassé la tete et apparement je ne suis pas encore assez attentif avec le code
Desolé
Desolé
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 18:31
12 déc. 2009 à 18:31
Ok merci quand même de ton aide.
Sinon quelqu'un d'autre a une solution a me proposer?
Sinon quelqu'un d'autre a une solution a me proposer?
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 18:45
12 déc. 2009 à 18:45
merci je vais tester sa tout de suite
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 18:50
12 déc. 2009 à 18:50
Oui ça marche ;) merci
maintenant il faut que je comprenne
maintenant il faut que je comprenne
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 18:55
12 déc. 2009 à 18:55
c'est encore moi mon second problème est que la personne qui redondera pourra mettre Paris ou paris(majuscule au début), je sais que pour mettre un ou on utilise || mais ou le placer?
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 19:14
12 déc. 2009 à 19:14
Merci sa marche encore et merci pour les explications maintenant j'ai tout compris mon dernier problème est que la capitale de l'argentine est Buenos aires et je ne sais pas comment on met un espace y'a t-il une solution?
shareaza15
Messages postés
667
Date d'inscription
samedi 16 mai 2009
Statut
Membre
Dernière intervention
11 mai 2010
26
12 déc. 2009 à 19:22
12 déc. 2009 à 19:22
Mais non meme avec un espace t'a qu'a changer la chaine a comparer (aucun probleme avec les espaces)
d'ailleur l'espace est considéré comme caractère
d'ailleur l'espace est considéré comme caractère
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 19:33
12 déc. 2009 à 19:33
Ah oui ça fonctionne aussi
Merci
Merci
shareaza15
Messages postés
667
Date d'inscription
samedi 16 mai 2009
Statut
Membre
Dernière intervention
11 mai 2010
26
12 déc. 2009 à 19:35
12 déc. 2009 à 19:35
met en resolu
Dora The Explorer
Messages postés
2811
Date d'inscription
mardi 4 septembre 2007
Statut
Contributeur
Dernière intervention
1 septembre 2011
853
12 déc. 2009 à 21:31
12 déc. 2009 à 21:31
T'es sûr que ça marche? Tu pourrais utiliser fgets à la place de scanf pour résoudre le problème de l'espace dans Buenos Aires. Après moi je me suis pas renseigné sur les 'saisies' donc je ne peux pas t'aider sur ce coup. Si quelqu'un d'autre est dans le coin... ;)
Par contre Buenos Aires pose d'autres problèmes: on peut écrire Buenos Aires, Buenos aires, buenos aires...
Tu devrais utiliser une fonction qui met tout ce qu'entre l'utilisateur en minuscules (et du coup dans ton code tu mets les noms des villes en minuscule évidemment):
Et pour mettre en minuscule:
Pour ce dernier morceau, on parcoure reponse en incrémentant la variable i et on met en minuscule le caractère, jusqu'au caractère \0. Ne pas oublier de remettre la variable i à 0, pour pouvoir reparcourir le tableau ensuite, pour la prochaine question...
Par contre Buenos Aires pose d'autres problèmes: on peut écrire Buenos Aires, Buenos aires, buenos aires...
Tu devrais utiliser une fonction qui met tout ce qu'entre l'utilisateur en minuscules (et du coup dans ton code tu mets les noms des villes en minuscule évidemment):
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <ctype.h> // faut rajouter celui-ci long i = 0; //on va avoir besoin de cette variable, on la rajoute
Et pour mettre en minuscule:
while (reponse[i] !='\0') { reponse[i] = tolower(reponse[i]); i++; } i = 0;// on remet la variable i à 0.
Pour ce dernier morceau, on parcoure reponse en incrémentant la variable i et on met en minuscule le caractère, jusqu'au caractère \0. Ne pas oublier de remettre la variable i à 0, pour pouvoir reparcourir le tableau ensuite, pour la prochaine question...
yous78200
Messages postés
16
Date d'inscription
samedi 12 décembre 2009
Statut
Membre
Dernière intervention
13 décembre 2009
12 déc. 2009 à 21:36
12 déc. 2009 à 21:36
Si ça fonctionne.Mais merci quand même, si ça bug j'essaierai alors ta technique.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
12 déc. 2009 à 21:40
12 déc. 2009 à 21:40
Effectivement le scanf c'est le mal ^^. Surtout si tu spécifies pas la taille maximum que l'utilisateur peut rentrer. Ainsi dans ton code, si l'utilisateur entre une chaîne supérieure à 100 caractères, tu recevras un crash de ton programme (segfault). En plus, avec le scanf(%s), tu ne peux pas obtenir les chaînes contenant des espaces. Un fgets est plus approprié.
Cdlt
Cdlt