Simplifier une chaine en langage C

Résolu/Fermé
flo_rock_69 - Modifié par flo_rock_69 le 18/12/2011 à 16:27
 flo_rock_69 - 18 déc. 2011 à 22:28
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 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
18 déc. 2011 à 17:14
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 dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
18 déc. 2011 à 18:02
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
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
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
18 déc. 2011 à 19:33
hé bien essaye ça :
Char reponseEvt[] = "naissance-de-lagriculture"
0
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 dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
18 déc. 2011 à 20:09
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