Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2955 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Projet en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Projet en C

n°1802095
lakthar
Posté le 19-10-2008 à 16:13:54  profilanswer
 

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 :
  1. #include<stdio.h>
  2. #include<stdlib.h> /*Pour exit();*/
  3. #include<time.h>  /*Pour rand();*/
  4. #include<string.h> /*Pour strcmpi();*/
  5. // On va maintenant saisir les question dans chaque fichier, sous forme de structure*/
  6. FILE *fichier1;// Fichier concernant les questions du thème d'histoire
  7. FILE *fichier2;// Fichier concernant les questions du thème Series
  8. FILE *fichier3;// Fichier concernant les questions du thème Cinema
  9. FILE *fichier4;// Fichier concernant les questions du thème Sport
  10. FILE *fichier5;// Fichier concernant les questions du thème Culture
  11. // 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
  12. struct Quizz
  13. {
  14.  char Question[100]; //Variable ou est stocké la question
  15.   char reponse1[50]; //Variable ou est stocké la premiere reponse possible
  16.   char reponse2[50]; //Variable ou est stocké la seconde reponse possible
  17.   char reponse3[50]; //Variable ou est stocké la troisieme reponse possible
  18.   int  BonneReponse1; //Variable ou est stocké la première réponse valable
  19.   int  BonneReponse2; //Variable ou est stocké la seconde réponse valable, si il y a lieu
  20.  int  NumeroQuestion; //Variable ou est stocké le numero de la question
  21.  }
  22.   ;
  23.     static struct Quizz questionH;
  24.                                                                   /****************************************************************
  25.                                                                   ***Première fonction*********************************************
  26.                                                                   ***Nom: void SaisieQuestions()***********************************
  27.                                                                   ***Utilité: permet de saisir les questions des diffèrents thèmes*
  28.                                                                   *****************************************************************
  29.                                                                   *****************************************************************
  30.                                                                   *****************************************************************/
  31. void SaisieQuestions()
  32. {
  33. char space;  // Variable permettant de récuperer l'espace entré après avoir taper le mot de passe */
  34. int ChoixTheme; // Variable permettant a l'admin de choisir le theme dans lequel il va inscrire ses questions
  35. char answer[3]; // Variable permettant de tester si il y a une deuxieme bonne reponse
  36. char test[3]="oui";
  37. printf(" Vous allez  inserer vos questions dans des fichiers qui vont être crèes\n\n" );
  38. printf("*************************" );
  39. printf(" \n**********Histoire******* \t\t<1>" );
  40. printf(" \n**********Series********* \t\t<2>" );
  41. printf(" \n**********Cinema********* \t\t<3>" );
  42. printf(" \n**********Sport********** \t\t<4>" );
  43. printf(" \n**********Culture******** \t\t<5>" );
  44. printf(" \n************************\n\n\n" );
  45. printf("\n**********Veuillez entrer votre choix**********\n" );
  46. scanf("%d",&ChoixTheme);
  47. system("clear" );
  48. switch(ChoixTheme)
  49. {
  50.  case 1: printf("****************************************************************\n" );
  51.   printf("****************************************************************\n" );
  52.   printf("*********Vous voulez  inserer des questions d'histoires*********\n" );
  53.   printf("****************************************************************\n" );
  54.   printf("****************************************************************\n\n" );
  55.   fichier1 =fopen("histoire.dat","a+" ); //Ouverture du fichier en mode  lecture et ecriture
  56.   if (fichier1==NULL)
  57.   printf("Probleme à l'ouverture du fichier" );
  58.   else
  59.   {  /* saisie de données"*/
  60.    fflush(stdin);
  61.    do
  62.    {
  63.     printf("Veuillez entrer la question\n" );
  64.     scanf("%c",&space);
  65.     gets(questionH.Question);
  66.     fflush(stdin);
  67.         printf("Veuillez entrer le numero de la question\n" );
  68.                      scanf("%d",&questionH.NumeroQuestion);
  69.                     fflush(stdin);
  70.                     printf("Veuillez entrer la premiere reponse possible\n" );
  71.                     scanf("%s",questionH.reponse1);
  72.     printf("Veuillez entrer la seconde reponse possible\n" );
  73.     scanf("%s",questionH.reponse2);
  74.     printf("Veuillez entrer la troisieme reponse possible\n" );
  75.     scanf("%s",questionH.reponse3);
  76.     printf("Veuillez entrer la premiere bonne reponse\n" );
  77.     scanf("%d",&questionH.BonneReponse1);
  78.                      // On va maintenant écrire le contenu entré dans le fichier  
  79.                  fwrite(&questionH,sizeof(questionH),1,fichier1); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
  80.     printf("Voulez vous écrire une autre question?" );
  81.     scanf("%s",answer);
  82.    }
  83.    while (strcmp( answer,"oui" )==0);
  84.    fclose(fichier1); // fermeture du fichier
  85.   }
  86.  break;
  87.  case 2: printf("****************************************************************\n" );
  88.   printf("****************************************************************\n" );
  89.   printf("*******Vous voulez  inserer des questions sur les Series********\n" );
  90.   printf("****************************************************************\n" );
  91.   printf("****************************************************************\n\n" );
  92.   fichier2=fopen("Series.dat","a+" ); //Ouverture du fichier en mode  lecture et ecriture
  93.   if (fichier2==NULL)
  94.   printf("Probleme à l'ouverture du fichier" );
  95. else
  96.   {  /* saisie de données"*/
  97.    fflush(stdin);
  98.    do
  99.    {
  100.     printf("Veuillez entrer la question\n" );
  101.     scanf("%c",&space);
  102.     gets(questionH.Question);
  103.     fflush(stdin);
  104.     printf("Veuillez entrer le numero de la question\n" );
  105.     scanf("%d",&questionH.NumeroQuestion);
  106.     printf("Veuillez entrer la premiere reponse possible\n" );
  107.     scanf("%s",questionH.reponse1);
  108.     printf("Veuillez entrer la seconde reponse possible\n" );
  109.     scanf("%s",questionH.reponse2);
  110.     printf("Veuillez entrer la troisieme reponse possible\n" );
  111.     scanf("%s",questionH.reponse3);
  112.     printf("Veuillez entrer la premiere bonne reponse\n" );
  113.     scanf("%d",&questionH.BonneReponse1);
  114.           // On va maintenant écrire le contenu entré dans le fichier  
  115.     fwrite(&questionH,sizeof(questionH),1,fichier2); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
  116.     printf("Voulez vous écrire une autre question?" );
  117.     scanf("%s",answer);
  118.    }
  119.    while (strcmp( answer,"oui" )==0);
  120.    fclose(fichier2); // fermeture du fichier
  121.   }
  122.  break;
  123.  case 3: printf("****************************************************************\n" );
  124.   printf("****************************************************************\n" );
  125.   printf("***********Vous voulez  inserer des questions Cinema************\n" );
  126.   printf("****************************************************************\n" );
  127.   printf("****************************************************************\n\n" );
  128.   fichier3=fopen("cinema.dat","a+" ); //Ouverture du fichier en mode  lecture et ecriture
  129.   if (fichier3==NULL)
  130.   printf("Probleme à l'ouverture du fichier" );
  131.   else
  132.   {  /* saisie de données"*/
  133.    fflush(stdin);
  134.    do
  135.    {
  136.     printf("Veuillez entrer la question\n" );
  137.     scanf("%c",&space);
  138.     gets(questionH.Question);
  139.     fflush(stdin);
  140.     printf("Veuillez entrer le numero de la question\n" );
  141.     scanf("%d",&questionH.NumeroQuestion);
  142.     printf("Veuillez entrer la premiere reponse possible\n" );
  143.     scanf("%s",questionH.reponse1);
  144.     printf("Veuillez entrer la seconde reponse possible\n" );
  145.     scanf("%s",questionH.reponse2);
  146.     printf("Veuillez entrer la troisieme reponse possible\n" );
  147.     scanf("%s",questionH.reponse3);
  148.     printf("Veuillez entrer la premiere bonne reponse\n" );
  149.     scanf("%d",&questionH.BonneReponse1);
  150.        // On va maintenant écrire le contenu entré dans le fichier  
  151.                     fwrite(&questionH,sizeof(questionH),1,fichier3); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
  152.     printf("Voulez vous écrire une autre question?" );
  153.     scanf("%s",answer);
  154.    }
  155.    while (strcmp( answer,"oui" )==0);
  156.    fclose(fichier3); // fermeture du fichier
  157.   }
  158.  break;
  159.  case 4: printf("****************************************************************\n" );
  160.   printf("****************************************************************\n" );
  161.   printf("**********Vous voulez  inserer des questions de Sport***********\n" );
  162.   printf("****************************************************************\n" );
  163.   printf("****************************************************************\n\n" );
  164.   fichier4=fopen("Sport.dat","a+" ); //Ouverture du fichier en mode  lecture et ecriture
  165.   if (fichier4==NULL)
  166.   printf("Probleme à l'ouverture du fichier" );
  167.   else
  168.   {  /* saisie de données"*/
  169.    fflush(stdin);
  170.    do
  171.    {
  172.     printf("Veuillez entrer la question\n" );
  173.     scanf("%c",&space);
  174.     gets(questionH.Question);
  175.     fflush(stdin);
  176.     printf("Veuillez entrer le numero de la question\n" );
  177.     scanf("%d",&questionH.NumeroQuestion);
  178.     printf("Veuillez entrer la premiere reponse possible\n" );
  179.     scanf("%s",questionH.reponse1);
  180.     printf("Veuillez entrer la seconde reponse possible\n" );
  181.     scanf("%s",questionH.reponse2);
  182.     printf("Veuillez entrer la troisieme reponse possible\n" );
  183.     scanf("%s",questionH.reponse3);
  184.     printf("Veuillez entrer la premiere bonne reponse\n" );
  185.     scanf("%d",&questionH.BonneReponse1);
  186.        // On va maintenant écrire le contenu entré dans le fichier  
  187.     fwrite(&questionH,sizeof(questionH),1,fichier4); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
  188.     printf("Voulez vous écrire une autre question?" );
  189.     scanf("%s",answer);
  190.    }
  191.    while (strcmp( answer,"oui" )==0);
  192.    fclose(fichier4); // fermeture du fichier
  193.   }
  194.  break;
  195.  case 5: printf("****************************************************************\n" );
  196.   printf("****************************************************************\n" );
  197.   printf("*********Vous voulez  inserer des questions de Culture**********\n" );
  198.   printf("****************************************************************\n" );
  199.   printf("****************************************************************\n\n" );
  200.   fichier5=fopen("culture.dat","a+" ); //Ouverture du fichier en mode  lecture et ecriture
  201.   if (fichier5==NULL)
  202.   printf("Probleme à l'ouverture du fichier" );
  203.   else
  204.   {  /* saisie de données"*/
  205.    fflush(stdin);
  206.    do
  207.    {
  208.     printf("Veuillez entrer la question\n" );
  209.     scanf("%c",&space);
  210.     gets(questionH.Question);
  211.     fflush(stdin);
  212.     printf("Veuillez entrer le numero de la question\n" );
  213.     scanf("%d",&questionH.NumeroQuestion);
  214.     printf("Veuillez entrer la premiere reponse possible\n" );
  215.     scanf("%s",questionH.reponse1);
  216.     printf("Veuillez entrer la seconde reponse possible\n" );
  217.     scanf("%s",questionH.reponse2);
  218.     printf("Veuillez entrer la troisieme reponse possible\n" );
  219.     scanf("%s",questionH.reponse3);
  220.     printf("Veuillez entrer la premiere bonne reponse\n" );
  221.     scanf("%d",&questionH.BonneReponse1);
  222.                 // On va maintenant écrire le contenu entré dans le fichier  
  223.     fwrite(&questionH,sizeof(questionH),1,fichier5); /*Ecriture du contenu de la structure dans le fichier consacré a l'histoire*/
  224.     printf("Voulez vous écrire une autre question?" );
  225.     scanf("%s",answer);
  226.    }
  227.    while (strcmp( answer,"oui" )==0);
  228.    fclose(fichier5); // fermeture du fichier
  229.   }
  230.  break;
  231.  default: printf("Choix non valide, arrête tes conneries Maurice" );
  232.  break;
  233. }
  234. }
  235.                                                                  /****************************************************************
  236.                                                                   ***Seconde fonction*********************************************
  237.                                                                   ***Nom: TirageAleatoire()***************************************
  238.                                                                   Utilité: permet de tirer aléatoirement une série de dix nombres*
  239.                                                                   *****************************************************************
  240.                                                                   *****************************************************************
  241.                                                                   *****************************************************************/
  242. void TirageAleatoire()
  243. {
  244. int i;            //Index
  245. int j;            //Index
  246. int k;            //Index
  247. int a,b,c;        //Variable permettant de stocker des variables temporaires permettant de classer les nombres aleatoires recuperés
  248. int range;        //Taille du tableau stockant les nombres allant être tiré
  249. int random[30];  //Tableau stockant les nombres a tiré au sort.
  250. int tab[10];      //Declaration d'un tableau afin de classer les nombres aleatoires
  251. //Nous utilisons ici 6 valeurs pour le mode facile, 12 pour le normal et 18 pour le difficilte.
  252. for(i=0;i<30;i++)
  253. random[i]=i;//Remplissage du tableau, avec un doublon de chaque valeur
  254. range=30;//Stocke la taille du tableau
  255. srand(time(NULL));//Initialise la gestion des nombres aléatoires
  256. //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é
  257. for(i=0;i<10;i++)
  258.     {
  259.                  k=rand()%(range);//Tire un nombre aléatoire dans les nombres contenu dans le tableau
  260.                    tab[i]=random[k];//Assignation de la case en cours par la valeur du tableau des nombres aléatoire
  261.          //On écrase la valeur qui a été prise, de maniére a ce qu'elle ne soit jamais tiré 2 fois.
  262.           while(k<(range-1))
  263.                     {
  264.        random[k]=random[k+1];
  265.        k++;
  266.              }
  267.               range--;//Réduction de la taille du tableau
  268. }
  269. for(j=0;j<10;j++)
  270.     {
  271.  for (i=j+1;i<10;i++)
  272.  {
  273.   a=tab[j];
  274.   b=tab[i];
  275.   if (a>b)
  276.   {
  277.      c=b;
  278.      tab[i]=a;
  279.      tab[j]=c;
  280.   }
  281.  }
  282. }
  283. for(i=0;i<10;i++){
  284. printf("%d - %d\n",i,tab[i]);
  285. }
  286. }
  287. void AffichageQuestions(){
  288.    
  289.  
  290.    
  291.    
  292.     fichier3=fopen("cinema.dat","r" );
  293.     if (fichier3==NULL)
  294. printf("Probleme à l'ouverture du fichier" );
  295. else
  296. /* saisie de données"*/
  297. do
  298. {
  299.    
  300.      printf("%d\n",questionH.NumeroQuestion);
  301.      printf("kéké" );
  302.      system("PAUSE" );   
  303.     }
  304. while(fread(&questionH,sizeof(questionH),1,fichier3)&& !feof(fichier3));
  305. fclose(fichier3); // fermeture du fichier
  306. }
  307. }
  308. main()
  309. {
  310. int ChoixMenu;
  311. int ChoixQuizz;
  312. int Mdp=666; /* Variable permettant de rentrer le mot de passe admin*/
  313. int mdp_input; /* Variable stockant la tentative de l'utilisateur concernant le mot de passe*/
  314. /* Prototypage des fonctions*/
  315. void SaisieQuestions();
  316. void TirageAleatoire();
  317. void AffichageQuestions();
  318. system("clear" );
  319. printf( "*****************************************************************************\n\n"
  320. "Bienvenue.  bon courage !\n\n"
  321. ">Ce quizz vous permet de vous auto-évaluer sur différents thèmes\n"
  322. ">10 Questions aléatoires vous seront posées sur le thème choisi\n"
  323. ">Pour chaque question trois réponses possible, mais une seule est vrai\n"
  324. ">A vous de choisir la bonne\n"
  325. ">Veillez à taper à taper un caractère entre 1 et 3\n"
  326. ">A l'issue du questionnaire, votre note vous sera donnée.\n\n"
  327. "*****************************************************************************\n" );
  328. printf( "\n\tQuizz\t\t\t\t\t<1>"
  329. "\n\tMeilleurs score\t\t\t\t<2>"
  330. "\n\tAdministrateur:Ajout de questions\t <3>"
  331. "\n\tQuitter\t\t\t\t\t<4>" );
  332. printf( "\nEntrez votre choix\n" );
  333. scanf( "%d",&ChoixMenu);
  334. system("clear" );
  335. switch(ChoixMenu)
  336. {
  337. case 1: printf( "\n\t\tQuizz :"
  338.   "\n\tHistoire\t<1>"
  339.   "\n\tSeries\t\t<2>"
  340.   "\n\tCinema\t\t<3>"
  341.   "\n\tSport\t\t<4>"
  342.   "\n\tCulture\t\t<5>\n" );
  343.   scanf("%d", &ChoixQuizz);
  344.   switch(ChoixQuizz)
  345.   {
  346.    case 1:printf("Vous avez choisi le thème Histoire" );
  347.    /*
  348.    FILE *fichier1;
  349.    fichier1 =fopen(histoire.dat,"r" ); //Ouverture du fichier en mode  lecture seule
  350.    if (fichier1= NULL)
  351.    printf("Probleme à l'ouverture du fichier" );
  352.    else
  353.    {  /* saisie de données"*/
  354.    
  355.    
  356.    
  357.    
  358.    break;
  359.    
  360.    case 2: printf("Vous avez choisi le thème Series" );
  361.    
  362.    break;
  363.    
  364.    case 3:printf("Vous vez choisi le thème Cinema\n\n" );
  365.         system("PAUSE" );
  366.         TirageAleatoire();
  367.         system("PAUSE" );
  368.          AffichageQuestions();
  369.         system("PAUSE" );
  370.  
  371.    
  372.    break;
  373.    
  374.    case 4:printf("Vous vez choisi le thème Sport" );
  375.    
  376.    break;
  377.    
  378.    case 5:printf("Vous vez choisi le thème Culture" );
  379.    
  380.    break;
  381.    
  382.    default: printf("\tChoix non valide" );
  383.    
  384.    
  385.    
  386.   }
  387.  break;
  388. case 2: printf("\n\tMeilleurs Scores" );
  389.  
  390.  break;
  391.  
  392. case 3: printf(" Vous allez maintenant entrez dans la partie reservée à l'administrateur\n" );
  393.  do
  394.  {  /* On teste l'ouverture du fichier, quoi ne doit être accessible que par l'admin*/
  395.   printf(" Veuillez entrer le mot de passe admin\n" );
  396.   scanf("%d",&mdp_input);
  397.  }  
  398.  while (mdp_input!=Mdp);  
  399.  
  400.  if (mdp_input==Mdp)
  401.  SaisieQuestions();
  402.  
  403.  break;  
  404. case 4: printf("\n\tMerci de votre participation à bientôt\n" );
  405.  exit(1);
  406.  break;
  407.  
  408. default: printf("\n\t Choix non valide" );  
  409. }
  410. }

mood
Publicité
Posté le 19-10-2008 à 16:13:54  profilanswer
 

n°1802145
ptitchep
Posté le 19-10-2008 à 19:41:01  profilanswer
 

variables globales, utilisation de gets... Qui t'a appris le C? Chez moi l'utilisation de gets déclenche même un warning du compilo (-Wall).
Sinon j'avoue que je ne comprends pas vraiment la question et ce qui te bloque. Essaie de ne laisser que le code qui te pose problème (plus lisible pour nous) et de reformuler ta question. Par exemple est-ce que c'est la lecture dans le fichier qui ne fonctionne pas ou seulement l'affichage des données etc... Utilise un debuggeur, si ce n'est déjà fait, tu auras une meilleure vision de ce que fait ton programme et de la localisation des problèmes. Ensuite donne des précisions et tu devrais recevoir un coup de main ;)


---------------
deluser --remove-home ptitchep

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Projet en C

 

Sujets relatifs
[Java/JNI et C] creation de variable globale[C++] impossible de compiler id3lib avec g++
MFC C++ cammande DOSVisual C++ 2008 Express : Ergonomie
[C++][Vector & String][Memoire] Excep sur ~ d'un vecteur de string> 15[C] Fournir un projet compilé sous Visual C++ à un ami
[AIDE] bug mon projet Cun mini projet en C (j ai besoin d aide)
{C#} Projet: Administrateur Tool : RecruteLibrairie LibTorrent & construction projet Visual C++
Plus de sujets relatifs à : Projet en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR