Simplifier une chaine en langage C

Résolu
flo_rock_69 -  
 flo_rock_69 -
Bonjour,

Alors voila, je suis en 3e, et comme vous le savez, en fin d'annee c'est le brevet.
Je suis donc sur un projet en C, ou l'ordinateur vous ferait reviser vos dates d'histoires, en vous posant des questions aleatoires, voila mon code tel qu'il est pour l'instant, ma question est posée a l'interieur:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
int numeroDate=0, reponseDate=0, nombreFaute=0, nombreReponse=0, quitterRecommencer=0;
char reponseEvt[25];
const int MAX=1, MIN=1; /*pour l'instant, max=1, car c'est pour le test,
mais ensuite, je metterais le nombre total de dates*/

srand(time(NULL));
numeroDate = (rand() % (MAX - MIN + 1)) + MIN; /*L'ordinateur choisit un nombre au hasard, qui correspond a une date, ou a un evenement*/

printf("\n\n =========Bienvenue sur le programme 'Brevet Histoire'=========\n\n\nLorsque une date ou une periode s'affiche, rentrer l'evenement correspondant.\nLorsqu'un evenement s'affiche, rentrer la date correspondante\n\nATTENTION N°1: pour ecrire un evenement,comme par exemple:\n\n'naissance de l'agriculture'\n\n-->vous devrez mettre des tirets entre chaque mot,pas d'apostrophe,pas d'accents et pas de majuscule ce qui nous ferait:\n\nnaissance-de-lagriculture\n\nATTENTION N°2:\nPour rentrer une date de type '11 novembre 1918' on ecrira: 11/novembre/1918 (toujours sans majuscules, sans espaces, seulement les tirets sont remplaces par des slash)\n\nATTENTION N°3: Pour ecrire une periode de type: '1804 a 1815', on ecrira:\n 1804-1815\n\nRentrez le chiffre 1 pour lancer la serie de 20 questions:\n\n");
scanf("%d",&quitterRecommencer);



if(numeroDate==1)
{
printf("\nVIII millenaire avant JC ------------->>> ");
scanf("%s", reponseEvt);

{
if(reponseEvt[0]== 'n'&& /*Voila, c'est ici que j'ai un soucis, car je voudrais
reponseEvt[1]== 'a'&& rendre tout le if beaucoup plus simplifié, car il y
reponseEvt[2]== 'i'&& a en tout une 60taine de dates, ce qui voudrait dire
reponseEvt[3]== 's'&& que je devrais refaire la meme chose 60 fois, et
reponseEvt[4]== 's'&& cette idee me fait un petit peu peur, si vous avez
reponseEvt[5]== 'a'&& une solution n'hesitez pas, et merci d'avance.
reponseEvt[6]== 'n'&&
reponseEvt[7]== 'c'&& (et desole si les espaces et les sauts de lignes
reponseEvt[8]== 'e'&& n'aparaissent pas, car en tout cas il n'y sont pas
reponseEvt[9]== '-'&& lors de la previsualisation, donc si vous pourriez
reponseEvt[10]=='d'&& aussi m'expliquer ceci, ce serait sympa...)*/
reponseEvt[11]=='e'&&
reponseEvt[12]=='-'&&
reponseEvt[13]=='l'&&
reponseEvt[14]=='a'&&
reponseEvt[15]=='g'&&
reponseEvt[16]=='r'&&
reponseEvt[17]=='i'&&
reponseEvt[18]=='c'&&
reponseEvt[19]=='u'&&
reponseEvt[20]=='l'&&
reponseEvt[21]=='t'&&
reponseEvt[22]=='u'&&
reponseEvt[23]=='r'&&
reponseEvt[24]=='e')
{
printf("\n\n**Bonne reponse!**\n\n");
nombreReponse++;

}

else
{
printf("\n\n Mauvaise reponse.\n\n--->La reponse etait: naissance-de-lagriculture \n\n");

nombreReponse++;
nombreFaute++;
}
}
}



return 0;
}





A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je fais le plus simple : "desole si les espaces et les sauts de lignes n'aparaissent pas, car en tout cas il n'y sont pas lors de la previsualisation, donc si vous pourriez aussi m'expliquer ceci, ce serait sympa..."

Tu dois utiliser les balises de code (à côté des boutons gras, italique et souligné)

<code>
    texte indenté
</code>
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   934
 
Pourquoi ne pas utiliser des structures?
Exemple
johand@osiris: ~/src/CCM/C $ cat quizz.c
#include <stdlib.h>
#include <stdio.h>

typedef struct qr
{
  char *question;
  char *answer;
}QR;

QR pool[] = {
  {"Quelle est la couleur du chevalblanc de Napoléon?",
   "vert"},
  {"A quel âge est né Confucius?", "100"}
};

int main(void)
{
  int nq, choice;
  nq = sizeof(pool) /sizeof(pool[0]);
  for (choice=0; choice < nq; choice++)
    {
      printf("Question %d\t%s\n", choice + 1, pool[choice].question);
    }
  return(EXIT_SUCCESS);
}
johand@osiris: ~/src/CCM/C $ gcc -Wall -o quizz
ohand@osiris: ~/src/CCM/C $ ./quizz 
Question 1	 Quelle est la couleur du chevalblanc de Napoléon?
Question 2	 A quel âge est né Confucius?


Le mieux serait de gérer les questions/réponses/pondérations/langues... dans une base de données
0
flo_rock_69
 
Alors la je t'avourais que j'ai pas tout compris, parceque je commence juste a apprendre le C et il y a plein de trucs que je comprend pas dans ton code ~_~
0
flo_rock_69
 
En fait, je me demandais simplement si il y n'y avait pas un moyen pour que :


(reponseEvt[0]== 'n'&&
reponseEvt[1]== 'a'&&
reponseEvt[2]== 'i'&&
reponseEvt[3]== 's'&&
reponseEvt[4]== 's'&&
reponseEvt[5]== 'a'&&
reponseEvt[6]== 'n'&&
reponseEvt[7]== 'c'&&
reponseEvt[8]== 'e'&&
reponseEvt[9]== '-'&&
reponseEvt[10]=='d'&&
reponseEvt[11]=='e'&&
reponseEvt[12]=='-'&&
reponseEvt[13]=='l'&&
reponseEvt[14]=='a'&&
reponseEvt[15]=='g'&&
reponseEvt[16]=='r'&&
reponseEvt[17]=='i'&&
reponseEvt[18]=='c'&&
reponseEvt[19]=='u'&&
reponseEvt[20]=='l'&&
reponseEvt[21]=='t'&&
reponseEvt[22]=='u'&&
reponseEvt[23]=='r'&&
reponseEvt[24]=='e')




deviennent par exemple quelque chose du genre:

reponseEvt[ ]="naissance-de-lagriculture"
0
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
hé bien essaye ça :
Char reponseEvt[] = "naissance-de-lagriculture"
0
flo_rock_69
 
Ca ne marche pas =(, mais je sais pas si tu as vu, mais je precise, que c'est dans un if
0
nicocorico Messages postés 799 Date d'inscription   Statut Membre Dernière intervention   138
 
Oui mais ça c'est pas un soucis : le but étant de déclarer les chaines avant de les comparer dans un if... Ainsi tu pourras regrouper chaque question avec la réponse attendue; Ensuite il te faudra comparer la réponse avec la chaine correspondante via une fonction 'StrCmp' je crois...
Le problème c'est que je connais rien au C, alors j'ai du mal à t'aider !
0