Probleme questionnaire en C
yous78200
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
yous78200 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
yous78200 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
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).
A voir également:
- Probleme questionnaire en C
- Questionnaire facebook - Guide
- Convertir questionnaire google form en word - Forum LibreOffice / OpenOffice
- Faut-il répondre au questionnaire arcom - Forum Vos droits sur internet
- Questionnaire croc-blanc 6eme ✓ - Forum Loisirs / Divertissements
- Questionnaire google form sans compte google ✓ - Forum Google Docs
28 réponses
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.
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.
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"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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é
Desolé
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
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):
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...
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