lakthar | Bonjour à tous j'ai un projet en informatique à rendre d'ici demain et j'ai quelques soucis sur mon programme
But du programme: génerer des qcm...l'admin entre les questions par thème dans un fichier du type "histoire.dat", ou "cinema.dat", une vngtaine par thème, l'utilisateur quand à lui choisir son thème et se verra affiché 10 questions, il faut donc faire un un tirage aléatoire des questions (10 parmi 20) et les afficher à l'utilisateur...C'est à ce niveau que je suis bloqué, je n'arrive pas à afficher le moindre caractère de mon fichier
Pour information, lorsque l'admin rentr une question, c'est sous forme de structure: question, numéro de la question, réponses possibles, et la bonne reponse...Je n'arrive pas à afficher les champs de ma structure
Mon but est d'afficher tout d'abord le champ comportant le numéro de la question, que je compare avec le résultat de random, pour ensuite avoir mon fameux tirage aléatoire
J'espère avoir été assez clair
J'ai fais un petit fichier.c pour tester d'afficher une structure depuis un fichier, et j'ai réussi sans difficulté lorsqu'il s'agit de chaines de caractères sans espaces, ou d'entiers...Mais ma variable contenant la question possède des espaces, et je pense que le problème vient de là..j'ignore comment faire.
Merci de votre aide
Code : C
Code :
- #include<stdio.h>
- #include<stdlib.h> /*Pour exit();*/
- #include<time.h> /*Pour rand();*/
- #include<string.h> /*Pour strcmpi();*/
- // On va maintenant saisir les question dans chaque fichier, sous forme de structure*/
- FILE *fichier1;// Fichier concernant les questions du thème d'histoire
- FILE *fichier2;// Fichier concernant les questions du thème Series
- FILE *fichier3;// Fichier concernant les questions du thème Cinema
- FILE *fichier4;// Fichier concernant les questions du thème Sport
- FILE *fichier5;// Fichier concernant les questions du thème Culture
- // On definit maintenant notre structure qui nous servira a rentrer nos questions, le numero de la question, les reponses possibles ainsi que la ou les bonnes reponses; On utilisera typedef afin de simplifier l'utilisation dans notre programme: pas de struct Quizz
- struct Quizz
- {
- char Question[100]; //Variable ou est stocké la question
- char reponse1[50]; //Variable ou est stocké la premiere reponse possible
- char reponse2[50]; //Variable ou est stocké la seconde reponse possible
- char reponse3[50]; //Variable ou est stocké la troisieme reponse possible
- int BonneReponse1; //Variable ou est stocké la première réponse valable
- int BonneReponse2; //Variable ou est stocké la seconde réponse valable, si il y a lieu
- int NumeroQuestion; //Variable ou est stocké le numero de la question
- }
- ;
- static struct Quizz questionH;
- /****************************************************************
- ***Première fonction*********************************************
- ***Nom: void SaisieQuestions()***********************************
- ***Utilité: permet de saisir les questions des diffèrents thèmes*
- *****************************************************************
- *****************************************************************
- *****************************************************************/
- void SaisieQuestions()
- {
- char space; // Variable permettant de récuperer l'espace entré après avoir taper le mot de passe */
- int ChoixTheme; // Variable permettant a l'admin de choisir le theme dans lequel il va inscrire ses questions
- char answer[3]; // Variable permettant de tester si il y a une deuxieme bonne reponse
- char test[3]="oui";
- printf(" Vous allez inserer vos questions dans des fichiers qui vont être crèes\n\n" );
- printf("*************************" );
- printf(" \n**********Histoire******* \t\t<1>" );
- printf(" \n**********Series********* \t\t<2>" );
- printf(" \n**********Cinema********* \t\t<3>" );
- printf(" \n**********Sport********** \t\t<4>" );
- printf(" \n**********Culture******** \t\t<5>" );
- printf(" \n************************\n\n\n" );
- printf("\n**********Veuillez entrer votre choix**********\n" );
- scanf("%d",&ChoixTheme);
- system("clear" );
- switch(ChoixTheme)
- {
- case 1: printf("****************************************************************\n" );
- printf("****************************************************************\n" );
- printf("*********Vous voulez inserer des questions d'histoires*********\n" );
- printf("****************************************************************\n" );
- printf("****************************************************************\n\n" );
- fichier1 =fopen("histoire.dat","a+" ); //Ouverture du fichier en mode lecture et ecriture
- if (fichier1==NULL)
- printf("Probleme à l'ouverture du fichier" );
- else
- { /* saisie de données"*/
- fflush(stdin);
- do
- {
- printf("Veuillez entrer la question\n" );
- scanf("%c",&space);
- gets(questionH.Question);
- fflush(stdin);
- printf("Veuillez entrer le numero de la question\n" );
- scanf("%d",&questionH.NumeroQuestion);
- fflush(stdin);
- printf("Veuillez entrer la premiere reponse possible\n" );
- scanf("%s",questionH.reponse1);
- printf("Veuillez entrer la seconde reponse possible\n" );
- scanf("%s",questionH.reponse2);
- printf("Veuillez entrer la troisieme reponse possible\n" );
- scanf("%s",questionH.reponse3);
- printf("Veuillez entrer la premiere bonne reponse\n" );
- scanf("%d",&questionH.BonneReponse1);
- // On va maintenant écrire le contenu entré dans le fichier
- fwrite(&questionH,sizeof(questionH),1,fichier1); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
- printf("Voulez vous écrire une autre question?" );
- scanf("%s",answer);
- }
- while (strcmp( answer,"oui" )==0);
- fclose(fichier1); // fermeture du fichier
- }
- break;
- case 2: printf("****************************************************************\n" );
- printf("****************************************************************\n" );
- printf("*******Vous voulez inserer des questions sur les Series********\n" );
- printf("****************************************************************\n" );
- printf("****************************************************************\n\n" );
- fichier2=fopen("Series.dat","a+" ); //Ouverture du fichier en mode lecture et ecriture
- if (fichier2==NULL)
- printf("Probleme à l'ouverture du fichier" );
- else
- { /* saisie de données"*/
- fflush(stdin);
- do
- {
- printf("Veuillez entrer la question\n" );
- scanf("%c",&space);
- gets(questionH.Question);
- fflush(stdin);
- printf("Veuillez entrer le numero de la question\n" );
- scanf("%d",&questionH.NumeroQuestion);
- printf("Veuillez entrer la premiere reponse possible\n" );
- scanf("%s",questionH.reponse1);
- printf("Veuillez entrer la seconde reponse possible\n" );
- scanf("%s",questionH.reponse2);
- printf("Veuillez entrer la troisieme reponse possible\n" );
- scanf("%s",questionH.reponse3);
- printf("Veuillez entrer la premiere bonne reponse\n" );
- scanf("%d",&questionH.BonneReponse1);
- // On va maintenant écrire le contenu entré dans le fichier
- fwrite(&questionH,sizeof(questionH),1,fichier2); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
- printf("Voulez vous écrire une autre question?" );
- scanf("%s",answer);
- }
- while (strcmp( answer,"oui" )==0);
- fclose(fichier2); // fermeture du fichier
- }
- break;
- case 3: printf("****************************************************************\n" );
- printf("****************************************************************\n" );
- printf("***********Vous voulez inserer des questions Cinema************\n" );
- printf("****************************************************************\n" );
- printf("****************************************************************\n\n" );
- fichier3=fopen("cinema.dat","a+" ); //Ouverture du fichier en mode lecture et ecriture
- if (fichier3==NULL)
- printf("Probleme à l'ouverture du fichier" );
- else
- { /* saisie de données"*/
- fflush(stdin);
- do
- {
- printf("Veuillez entrer la question\n" );
- scanf("%c",&space);
- gets(questionH.Question);
- fflush(stdin);
- printf("Veuillez entrer le numero de la question\n" );
- scanf("%d",&questionH.NumeroQuestion);
- printf("Veuillez entrer la premiere reponse possible\n" );
- scanf("%s",questionH.reponse1);
- printf("Veuillez entrer la seconde reponse possible\n" );
- scanf("%s",questionH.reponse2);
- printf("Veuillez entrer la troisieme reponse possible\n" );
- scanf("%s",questionH.reponse3);
- printf("Veuillez entrer la premiere bonne reponse\n" );
- scanf("%d",&questionH.BonneReponse1);
- // On va maintenant écrire le contenu entré dans le fichier
- fwrite(&questionH,sizeof(questionH),1,fichier3); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
- printf("Voulez vous écrire une autre question?" );
- scanf("%s",answer);
- }
- while (strcmp( answer,"oui" )==0);
- fclose(fichier3); // fermeture du fichier
- }
- break;
- case 4: printf("****************************************************************\n" );
- printf("****************************************************************\n" );
- printf("**********Vous voulez inserer des questions de Sport***********\n" );
- printf("****************************************************************\n" );
- printf("****************************************************************\n\n" );
- fichier4=fopen("Sport.dat","a+" ); //Ouverture du fichier en mode lecture et ecriture
- if (fichier4==NULL)
- printf("Probleme à l'ouverture du fichier" );
- else
- { /* saisie de données"*/
- fflush(stdin);
- do
- {
- printf("Veuillez entrer la question\n" );
- scanf("%c",&space);
- gets(questionH.Question);
- fflush(stdin);
- printf("Veuillez entrer le numero de la question\n" );
- scanf("%d",&questionH.NumeroQuestion);
- printf("Veuillez entrer la premiere reponse possible\n" );
- scanf("%s",questionH.reponse1);
- printf("Veuillez entrer la seconde reponse possible\n" );
- scanf("%s",questionH.reponse2);
- printf("Veuillez entrer la troisieme reponse possible\n" );
- scanf("%s",questionH.reponse3);
- printf("Veuillez entrer la premiere bonne reponse\n" );
- scanf("%d",&questionH.BonneReponse1);
- // On va maintenant écrire le contenu entré dans le fichier
- fwrite(&questionH,sizeof(questionH),1,fichier4); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
- printf("Voulez vous écrire une autre question?" );
- scanf("%s",answer);
- }
- while (strcmp( answer,"oui" )==0);
- fclose(fichier4); // fermeture du fichier
- }
- break;
- case 5: printf("****************************************************************\n" );
- printf("****************************************************************\n" );
- printf("*********Vous voulez inserer des questions de Culture**********\n" );
- printf("****************************************************************\n" );
- printf("****************************************************************\n\n" );
- fichier5=fopen("culture.dat","a+" ); //Ouverture du fichier en mode lecture et ecriture
- if (fichier5==NULL)
- printf("Probleme à l'ouverture du fichier" );
- else
- { /* saisie de données"*/
- fflush(stdin);
- do
- {
- printf("Veuillez entrer la question\n" );
- scanf("%c",&space);
- gets(questionH.Question);
- fflush(stdin);
- printf("Veuillez entrer le numero de la question\n" );
- scanf("%d",&questionH.NumeroQuestion);
- printf("Veuillez entrer la premiere reponse possible\n" );
- scanf("%s",questionH.reponse1);
- printf("Veuillez entrer la seconde reponse possible\n" );
- scanf("%s",questionH.reponse2);
- printf("Veuillez entrer la troisieme reponse possible\n" );
- scanf("%s",questionH.reponse3);
- printf("Veuillez entrer la premiere bonne reponse\n" );
- scanf("%d",&questionH.BonneReponse1);
- // On va maintenant écrire le contenu entré dans le fichier
- fwrite(&questionH,sizeof(questionH),1,fichier5); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
- printf("Voulez vous écrire une autre question?" );
- scanf("%s",answer);
- }
- while (strcmp( answer,"oui" )==0);
- fclose(fichier5); // fermeture du fichier
- }
- break;
- default: printf("Choix non valide, arrête tes conneries Maurice" );
- break;
- }
- }
- /****************************************************************
- ***Seconde fonction*********************************************
- ***Nom: TirageAleatoire()***************************************
- Utilité: permet de tirer aléatoirement une série de dix nombres*
- *****************************************************************
- *****************************************************************
- *****************************************************************/
- void TirageAleatoire()
- {
- int i; //Index
- int j; //Index
- int k; //Index
- int a,b,c; //Variable permettant de stocker des variables temporaires permettant de classer les nombres aleatoires recuperés
- int range; //Taille du tableau stockant les nombres allant être tiré
- int random[30]; //Tableau stockant les nombres a tiré au sort.
- int tab[10]; //Declaration d'un tableau afin de classer les nombres aleatoires
- //Nous utilisons ici 6 valeurs pour le mode facile, 12 pour le normal et 18 pour le difficilte.
- for(i=0;i<30;i++)
- random[i]=i;//Remplissage du tableau, avec un doublon de chaque valeur
- range=30;//Stocke la taille du tableau
- srand(time(NULL));//Initialise la gestion des nombres aléatoires
- //Le tableau est rempli selon une double boucle parcourant tout les élément qui vont être affiché par le joueur en fonction de son niveau de difficulté
- for(i=0;i<10;i++)
- {
- k=rand()%(range);//Tire un nombre aléatoire dans les nombres contenu dans le tableau
- tab[i]=random[k];//Assignation de la case en cours par la valeur du tableau des nombres aléatoire
- //On écrase la valeur qui a été prise, de maniére a ce qu'elle ne soit jamais tiré 2 fois.
- while(k<(range-1))
- {
- random[k]=random[k+1];
- k++;
- }
- range--;//Réduction de la taille du tableau
- }
- for(j=0;j<10;j++)
- {
- for (i=j+1;i<10;i++)
- {
- a=tab[j];
- b=tab[i];
- if (a>b)
- {
- c=b;
- tab[i]=a;
- tab[j]=c;
- }
- }
- }
- for(i=0;i<10;i++){
- printf("%d - %d\n",i,tab[i]);
- }
- }
- void AffichageQuestions(){
-
-
-
-
- fichier3=fopen("cinema.dat","r" );
- if (fichier3==NULL)
- printf("Probleme à l'ouverture du fichier" );
- else
- { /* saisie de données"*/
- do
- {
-
- printf("%d\n",questionH.NumeroQuestion);
- printf("kéké" );
- system("PAUSE" );
- }
- while(fread(&questionH,sizeof(questionH),1,fichier3)&& !feof(fichier3));
- fclose(fichier3); // fermeture du fichier
- }
- }
- main()
- {
- int ChoixMenu;
- int ChoixQuizz;
- int Mdp=666; /* Variable permettant de rentrer le mot de passe admin*/
- int mdp_input; /* Variable stockant la tentative de l'utilisateur concernant le mot de passe*/
- /* Prototypage des fonctions*/
- void SaisieQuestions();
- void TirageAleatoire();
- void AffichageQuestions();
- system("clear" );
- printf( "*****************************************************************************\n\n"
- "Bienvenue. bon courage !\n\n"
- ">Ce quizz vous permet de vous auto-évaluer sur différents thèmes\n"
- ">10 Questions aléatoires vous seront posées sur le thème choisi\n"
- ">Pour chaque question trois réponses possible, mais une seule est vrai\n"
- ">A vous de choisir la bonne\n"
- ">Veillez à taper à taper un caractère entre 1 et 3\n"
- ">A l'issue du questionnaire, votre note vous sera donnée.\n\n"
- "*****************************************************************************\n" );
- printf( "\n\tQuizz\t\t\t\t\t<1>"
- "\n\tMeilleurs score\t\t\t\t<2>"
- "\n\tAdministrateur:Ajout de questions\t <3>"
- "\n\tQuitter\t\t\t\t\t<4>" );
- printf( "\nEntrez votre choix\n" );
- scanf( "%d",&ChoixMenu);
- system("clear" );
- switch(ChoixMenu)
- {
- case 1: printf( "\n\t\tQuizz :"
- "\n\tHistoire\t<1>"
- "\n\tSeries\t\t<2>"
- "\n\tCinema\t\t<3>"
- "\n\tSport\t\t<4>"
- "\n\tCulture\t\t<5>\n" );
- scanf("%d", &ChoixQuizz);
- switch(ChoixQuizz)
- {
- case 1:printf("Vous avez choisi le thème Histoire" );
- /*
- FILE *fichier1;
- fichier1 =fopen(histoire.dat,"r" ); //Ouverture du fichier en mode lecture seule
- if (fichier1= NULL)
- printf("Probleme à l'ouverture du fichier" );
- else
- { /* saisie de données"*/
-
-
-
-
- break;
-
- case 2: printf("Vous avez choisi le thème Series" );
-
- break;
-
- case 3:printf("Vous vez choisi le thème Cinema\n\n" );
- system("PAUSE" );
- TirageAleatoire();
- system("PAUSE" );
- AffichageQuestions();
- system("PAUSE" );
-
-
- break;
-
- case 4:printf("Vous vez choisi le thème Sport" );
-
- break;
-
- case 5:printf("Vous vez choisi le thème Culture" );
-
- break;
-
- default: printf("\tChoix non valide" );
-
-
-
- }
- break;
- case 2: printf("\n\tMeilleurs Scores" );
-
- break;
-
- case 3: printf(" Vous allez maintenant entrez dans la partie reservée à l'administrateur\n" );
- do
- { /* On teste l'ouverture du fichier, quoi ne doit être accessible que par l'admin*/
- printf(" Veuillez entrer le mot de passe admin\n" );
- scanf("%d",&mdp_input);
- }
- while (mdp_input!=Mdp);
-
- if (mdp_input==Mdp)
- SaisieQuestions();
-
- break;
- case 4: printf("\n\tMerci de votre participation à bientôt\n" );
- exit(1);
- break;
-
- default: printf("\n\t Choix non valide" );
- }
-
- }
|
|