Partage
  • Partager sur Facebook
  • Partager sur Twitter

questionnaire fichier

    16 octobre 2020 à 18:17:36

    Salut, j'espère que vous allez bien , bon j'ai un long programme à faire , et le code ci dessus c juste un petit départ , moi maintenant
    je veux afficher dans fichier (.txt) le score obtenu en nombre et je sais que le x ici est caractere ,comment je l'inverse à note obtenu, et quand j'ai lancé
    ce code , ne fonctionne pas , il ne lit pas mon réponse x.
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
        FILE *LOL = NULL;
        char x;
        char nom[20],prenom[20];
    
        LOL=fopen("Questionnaire.txt", "w");
    
        printf("Donner ton nom : ");
        scanf("%s",nom);
        printf("Donner ton prenom : ");
        scanf("%s",prenom);
        printf("\n");
        printf("Bienvenue, voici ton premier question.\n");
    
        printf("Un parametre formel d'une action parametree est caracterise par :\n");
        printf("  a) Mode de transmission\n");
        printf("  b) Nom du parametre\n");
        printf("  c) Valeur du parametre\n");
        printf("Ton reponse est ? ");
        scanf("%c",&x);
        switch(x){
         case 'a':
           fprintf(LOL,"Ta reponse est fausse et t'auras 0 points.\n");
            break;
         case 'b':
           fprintf(LOL,"Ta reponse est correcte et t'auras 2 points.\n");
            break;
         case 'c':
           fprintf(LOL,"Ta reponse est fausse et t'auras 0 points.\n");
            break;
            default:
            fprintf(LOL,"Erreur ! SVP inserer reponses a,b ou c.\n");
        }
    
        fprintf(LOL,"Le score obtenu par %s %s est %c/2.",nom,prenom,x);
    
        fclose(LOL);
        return 0;
    }
    
    • Partager sur Facebook
    • Partager sur Twitter
      16 octobre 2020 à 19:07:15

      LOL est un excellent nom de variable, je confirme.

      Plusieurs choses

      • Ligne 12 : erreur de débutant, buffer overflow
      • Ligne 14 : de même, utilisez fgets.

      Ton soucis concernant ta question c'est que scanf avec "%s" va lire jusqu'au prochain blanc et donc quand tu appuies sur entrée celui reste dans l'entrée standard. Voilà pourquoi la saisie utilisateur ne se fait pas avec scanf mais avec fgets (par exemple).

      Conseil : lisez un peu plus de cours sur le C avant de continuer, notamment sur la saisie.

      -
      Edité par markand 16 octobre 2020 à 19:08:26

      • Partager sur Facebook
      • Partager sur Twitter

      git is great because Linus did it, mercurial is better because he didn't.

        17 octobre 2020 à 11:36:04

        markand a écrit:

        LOL est un excellent nom de variable, je confirme.

        Plusieurs choses

        • Ligne 12 : erreur de débutant, buffer overflow
        • Ligne 14 : de même, utilisez fgets.

        Ton soucis concernant ta question c'est que scanf avec "%s" va lire jusqu'au prochain blanc et donc quand tu appuies sur entrée celui reste dans l'entrée standard. Voilà pourquoi la saisie utilisateur ne se fait pas avec scanf mais avec fgets (par exemple).

        Conseil : lisez un peu plus de cours sur le C avant de continuer, notamment sur la saisie.

        -
        Edité par markand il y a environ 5 heures

        mdr , j'étais fou quand j'ai l'écri, mais LOL me facilite de comprendre quoi faire aprés , et ne perdre pas le momentum mais , dcr merci j'ai corrigé ,il fonctionne maintenant ,mais comme je suis débutant je ne sais qoi faire avec ligne 38 ,moi je veux afficher la note d'utilisateur , je sais que %c est un caractére x aussi ,mais je sais pas comment j'écris la note à partir les réponses a,b ou c. 

        • Partager sur Facebook
        • Partager sur Twitter
          17 octobre 2020 à 12:27:32

          Ce que tu pourrais essayer c'est, juste avant la ligne 23 (le 'scanf' d'un caractère), de vider le tampon. Fais une recherche avec comme critère « vider le buffer », je pense que tu devrais trouver pas mal de choses et notamment des codes à recopier. Je ne suis pas sûr, mais je crois que c'est un problème de tampon qui contient encore un caractère ('\n' en l'occurrence) qu'il faut donc vider.

          -
          Edité par robun 17 octobre 2020 à 12:27:58

          • Partager sur Facebook
          • Partager sur Twitter
            17 octobre 2020 à 20:12:07

            robun a écrit:

            Ce que tu pourrais essayer c'est, juste avant la ligne 23 (le 'scanf' d'un caractère), de vider le tampon. Fais une recherche avec comme critère « vider le buffer », je pense que tu devrais trouver pas mal de choses et notamment des codes à recopier. Je ne suis pas sûr, mais je crois que c'est un problème de tampon qui contient encore un caractère ('\n' en l'occurrence) qu'il faut donc vider.

            -
            Edité par robun il y a environ 7 heures

            c bon j'ai réglé tout.
            #include <stdio.h>
            #include <stdlib.h>
            
            int main(){
                FILE *MDR = NULL;
                FILE *LOL = NULL;
                char x;
                char nom[20],prenom[20];
                int y;
            
                printf("Donne ton nom : ");
                gets(nom);
                printf("Donne ton prenom : ");
                gets(prenom);
            
                LOL=fopen("Questionnaire.txt", "w");
                MDR=fopen("Score.txt","w");
            
                if(LOL != NULL){
                printf("Bienvenue %s %s, voici ton premier question.\n",nom,prenom);
            
                printf("Un parametre formel d'une action parametree est caracterise par :\n");
                printf("  a) Mode de transmission\n");
                printf("  b) Nom du parametre\n");
                printf("  c) Valeur du parametre\n");
                printf("Ta reponse est ? ");
                scanf("%c",&x);
                switch(x){
                 case 'a':
                   fprintf(LOL,"Ta reponse est fausse et t'auras 0 points.\n");
                    break;
                 case 'b':
                   fprintf(LOL,"Ta reponse est correcte et t'auras 2 points.\n");
                    break;
                 case 'c':
                   fprintf(LOL,"Ta reponse est fausse et t'auras 0 points.\n");
                    break;
                    default:
                    fprintf(LOL,"Erreur ! SVP inserer reponses a,b ou c.\n");
                }
                if(x == 'a' || x == 'c')
                    y=0;
                else
                    y=2;
            
                }
                fprintf(MDR,"Le score obtenu par %s %s est %d/2.",nom,prenom,y);
            
                fclose(MDR);
            
                fclose(LOL);
                return 0;
            }
            
            

            comme tu le vois sans probleme, et si vous avez des idees pour améliorer mon programme , j'aimerais bien t"entendre.








            • Partager sur Facebook
            • Partager sur Twitter
              17 octobre 2020 à 21:58:19

              Hello,

              Regarde ton test ligne 41. Ne vois-tu pas que grace à lui tu peux supprimer ton switch ?

              -
              Edité par edgarjacobs 17 octobre 2020 à 22:00:13

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                19 octobre 2020 à 9:18:15

                Utilisez fgets, non gets cette fonction est supprimée depuis C11 et est totalement dangereuse.
                • Partager sur Facebook
                • Partager sur Twitter

                git is great because Linus did it, mercurial is better because he didn't.

                questionnaire fichier

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown