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
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).

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
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.
3
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
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.
1
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
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"
0
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
merci mais j'ai déjà essayé sa ne change rien
sinon aurez tu d'autre proposition
0

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
Peut etre aurais tu du ecrire
"reponse[]"
au lieu de
"reponse"
0
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
j'ai déjà essayé aussi sa ne change pas
0
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
Supprime la ligne entre if et {et verifie tes inclusions
0
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
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?
0
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
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é
0
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
Ok merci quand même de ton aide.
Sinon quelqu'un d'autre a une solution a me proposer?
0
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
merci je vais tester sa tout de suite
0
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
Oui ça marche ;) merci
maintenant il faut que je comprenne
0
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
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?
0
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
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?
0
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
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
0
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
Ah oui ça fonctionne aussi
Merci
0
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
met en resolu
0
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
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...
0
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
Si ça fonctionne.Mais merci quand même, si ça bug j'essaierai alors ta technique.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
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
0