Simplifier une chaine en langage C

Résolu
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;
}

2 réponses

  1. Modérateur
    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
    1. Modérateur
      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
      1. 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
      2. 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
      3. hé bien essaye ça :
        Char reponseEvt[] = "naissance-de-lagriculture"
        0
      4. Ca ne marche pas =(, mais je sais pas si tu as vu, mais je precise, que c'est dans un if
        0
      5. 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