Simplifier une chaine en langage C
Résolu
flo_rock_69
-
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;
}
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:
- Simplifier une chaine en langage C
- Langage ascii - Guide
- Chaine tnt gratuite sur mobile - Guide
- Chaine radio - Télécharger - Médias et Actualité
- Langage binaire - Guide
- Plus de chaine tv - Guide
2 réponses
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é)
Tu dois utiliser les balises de code (à côté des boutons gras, italique et souligné)
<code> texte indenté</code>
Pourquoi ne pas utiliser des structures?
Exemple
Le mieux serait de gérer les questions/réponses/pondérations/langues... dans une base de données
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
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"
(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"
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 !
Le problème c'est que je connais rien au C, alors j'ai du mal à t'aider !