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   -
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   Statut Contributeur Dernière intervention   854
 
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   Statut Contributeur Dernière intervention   854
 
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   Statut Membre Dernière intervention   26
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   26
 
Peut etre aurais tu du ecrire
"reponse[]"
au lieu de
"reponse"
0
yous78200 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai déjà essayé aussi sa ne change pas
0
shareaza15 Messages postés 667 Date d'inscription   Statut Membre Dernière intervention   26
 
Supprime la ligne entre if et {et verifie tes inclusions
0
yous78200 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   26
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
merci je vais tester sa tout de suite
0
yous78200 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Oui ça marche ;) merci
maintenant il faut que je comprenne
0
yous78200 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   26
 
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   Statut Membre Dernière intervention  
 
Ah oui ça fonctionne aussi
Merci
0
shareaza15 Messages postés 667 Date d'inscription   Statut Membre Dernière intervention   26
 
met en resolu
0
Dora The Explorer Messages postés 2811 Date d'inscription   Statut Contributeur Dernière intervention   854
 
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   Statut Membre Dernière intervention  
 
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   Statut Contributeur Dernière intervention   1 846
 
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