Probleme questionnaire en C
yous78200
Messages postés
16
Statut
Membre
-
yous78200 Messages postés 16 Statut Membre -
yous78200 Messages postés 16 Statut Membre -
Bonjour,
Voila je suis débutant en programmation et je voudrais créer un questionnaire.
mon problème est le suivant:
int question1=0;
char reponse[100];
printf("question1:quelle est la capitale de la France");
scanf("%s", &reponse);
if(reponse==Paris)
{
question1=1;
}
printf("%d", question1);
mon problème est que sur la console mon dernier printf marque toujours 0 même quand je marque Paris(bonne reponse).
Voila je suis débutant en programmation et je voudrais créer un questionnaire.
mon problème est le suivant:
int question1=0;
char reponse[100];
printf("question1:quelle est la capitale de la France");
scanf("%s", &reponse);
if(reponse==Paris)
{
question1=1;
}
printf("%d", question1);
mon problème est que sur la console mon dernier printf marque toujours 0 même quand je marque Paris(bonne reponse).
Configuration: Windows Vista Firefox 3.5.5
28 réponses
- 1
- 2
Suivant
-
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):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. -
Essaye avec:
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. -
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" -
merci mais j'ai déjà essayé sa ne change rien
sinon aurez tu d'autre proposition -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Peut etre aurais tu du ecrire
"reponse[]"
au lieu de
"reponse" -
-
Supprime la ligne entre if et {et verifie tes inclusions
-
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?
-
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é -
Ok merci quand même de ton aide.
Sinon quelqu'un d'autre a une solution a me proposer? -
-
Oui ça marche ;) merci
maintenant il faut que je comprenne -
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?
-
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?
-
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 -
-
-
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):#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... -
Si ça fonctionne.Mais merci quand même, si ça bug j'essaierai alors ta technique.
-
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
- 1
- 2
Suivant