IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

ecrire dans un fichier avec une fonction de type "void"


Sujet :

C

  1. #1
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut ecrire dans un fichier avec une fonction de type "void"
    Bonjour chers amis, je suis entrain de mettre en place un programme qui crée un fichier a l'endoit ou on l'indique, puis genere des chiffres qu'on lui demande a l'interieur du fichier.
    voici comment le programme marche:
    1) on te demande de creer un fichier a l'endroit où tu souhaite : /endroit_a_enregistrer/nom_du_fichier;
    2) grâce à l'appel de la fonction 'generate()', on te demande combien de chiffres cherche tu a generer?
    apres avoir entré le nom du fichier et le nombre a generer, mon fichier doit etre remplit d'un nombre aleatoire compris en 0-9

    mais lorsque j'appel la fonction "fprintf(fichier, generate());" au niveau du code source et que je compile j'ai cette erreur :

    gcc -o dico dico.c -lm
    dico.c: In function ‘main’:
    dico.c:21:5: error: invalid use of void expression
    fprintf(fichier, generate());

    à ma façcon de comprendre je pense la fonction "fprintf" n'arrive pas a traiter le generate(). si il ya d'autres explication j'en ai vraiment besoin.
    comment y remedier afin de pouvoir ecrir dans mon fichier grace a la fonction 'generate()'??????

    le code source est tout en bas!
    Merci pour vos reponse, je suis en attente

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define LG_CHAINE 1000
     
    void generate();
     
    int main(void){
     
      char chaine[LG_CHAINE] = "";
      FILE* fichier = NULL;
     
      printf("input your directory file to save\n");
      printf("for example '/directory/file_to_save':");
      scanf("%s", &chaine);
      fichier = fopen(chaine, "a+");
      generate();
     
      if (fichier != NULL)
      {
        fprintf(fichier, generate());
        printf("File created with success!\n");
        fclose(fichier);
      }
     
      else
        printf("creating file failed, try again later!\n");
     
    return 0;
    }
     
    void generate(){
     
      int nbre = 0;
      int resultat = 0;
      printf("How number do you want to generate?:");
      scanf("%d", &nbre);
      srand(time(NULL));
      for (int i = 0; i < nbre; i++)
        resultat = rand()%10;
    }
    Au délà des codes de language, il y a la reflexion!

  2. #2
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Il y a de l'idée mais tout n'est pas encore clair pour toi, notamment en ce qui concerne la notion de portée de variable.

    Deux questions :




    Il sera à terme préférable de récupérer les arguments de ce genre de programme à responsabilité simple (que l'on qualifie parfois de « moulinette ») depuis la ligne de commande plutôt que directement auprès de l'utilisateur. Mais on ne va pas mettre la charrue avant les bœufs..

  3. #3
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Matt_Houston Voir le message
    Il y a de l'idée mais tout n'est pas encore clair pour toi, notamment en ce qui concerne la notion de portée de variable.

    Deux questions :




    Il sera à terme préférable de récupérer les arguments de ce genre de programme à responsabilité simple (que l'on qualifie parfois de « moulinette ») depuis la ligne de commande plutôt que directement auprès de l'utilisateur. Mais on ne va pas mettre la charrue avant les bœufs..


    je n'arrive pas a bien m'en sortir puisque l'anglais je suis moyen.
    mais n'existe t'il pas un moyen de conversion de fonction en char? ou tout autre chose permerttant de faire ce que je veux??
    Au délà des codes de language, il y a la reflexion!

  4. #4
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut
    Cette fonction fait un truc et ne renvoie rien car elle a le type void.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(fichier, generate());
    En continuant la réflexion ici, tu donnes en argument à fprintf un descripteur de fichier (ok, c'est tout bon) et rien. Non, tu ne donnes pas la fonction generate en argument puisque tu rajoutes les parenthèses et donc appelle cette fonction.
    Ensuite, le deuxième argument attendu de fprintf est char*, donc même si tu donnais ta fonction en argument, ça fonctionnerait pas.

    Je ne peux pas croire que tu ne trouves pas de cours ou de tutoriel sur le C en français, il suffit de cliquer sur le bouton "Tutoriels C" présent en haut de cette page dans les menus.
    Raphchar.

  5. #5
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Merci a tous, j'ai pu trouver la solution en redirigeant la sortie des mes nombres aleatoires vers le fichier grace a la fonction freopen() de redirection de flux stdout vers un fichier,
    en fait j'ai crée un 2eme descripteur de fichier pour y arriver .merci a tous, voici le code final qui marche nickel, je vais l'ameliorer en generant plusieurs
    nombre sur plusieurs lignes merci infinimant a tous pour vos aides
    voici le code final
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define LG_CHAINE 1000
     
    void  generate();
     
    int main(void){
     
      char chaine[LG_CHAINE] = "";
      int nbre = 0, resultat = 0;
      FILE* fichier = NULL;
     
      printf("input your directory file to save\n");
      printf("for example '/directory/file_to_save':");
      scanf("%s", &chaine);
      fichier = fopen(chaine, "w+");
     
      srand(time(NULL));
     
      if (fichier != NULL)
      {
        printf("How number do you want to generate?:");
        scanf("%d", &nbre);
     
        FILE *fichier2 = freopen(chaine, "a+", fichier);
        if (fichier != NULL)
        {
          fprintf(fichier, "Random number\n");
     
          for (int i = 0; i < nbre; i++)
          {
            resultat = rand()%10;
            fprintf(fichier,"%d",resultat);
          }
     
          fclose(fichier);
        }
     
        printf("File created with success!\n");
     
      }
      else
        printf("creating file failed,unknow directory.Try again later!\n");
     
    return 0;
    }
    Au délà des codes de language, il y a la reflexion!

  6. #6
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FILE *fichier2 = freopen(chaine, "a+", fichier);
    Je ne comprend pas cette ligne, si tu la supprimes, ça devrait toujours fonctionner, non ? D'ailleurs tu n'utilises pas fichier2 par la suite
    Raphchar.

  7. #7
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    j'ai essayer de la supprimer et sa passe pas. mais dit moi est ce possible d'utiliser la fonction freopen() sans un descripteur de fichier 'FILE *fichier' ? si oui comment??
    :ro
    Au délà des codes de language, il y a la reflexion!

  8. #8
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut
    Comment ça, ça ne passe pas ? J'ai copié-collé ton code, viré la ligne en question et chez moi tout fonctionne. J'obtiens un fichier comme il faut. Peut-être que le code que tu as posté n'est pas le même que celui que tu utilises ? D'ailleurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le test if (fichier != NULL)
    est effectué deux fois.

    Si j'épure ton code, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define LG_CHAINE 1000
     
    int main() {
        char chaine[LG_CHAINE] = "";
        int nbre = 0, resultat = 0;
        FILE* fichier = NULL;
     
        printf("input your directory file to save\n");
        printf("for example '/directory/file_to_save':");
        scanf("%s", &chaine);
        fichier = fopen(chaine, "w+");
        srand(time(NULL));
        if (fichier != NULL)
        {
            printf("How number do you want to generate?:");
            scanf("%d", &nbre);
            fprintf(fichier, "Random number\n");
            for (int i = 0; i < nbre; i++)
            {
                resultat = rand() % 10;
                fprintf(fichier, "%d", resultat);
            }
            fclose(fichier);
            printf("File created with success!\n");
        }
        else
            printf("creating file failed,unknow directory.Try again later!\n");
        return 0;
    }
    Et un conseil, si ton choix de langage n'est pas imposé, change de C à C++, ce sera sans doute plus simple pour débuter.
    Raphchar.

  9. #9
    Nouveau membre du Club Avatar de johntheripper
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2016
    Messages : 43
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par raphchar Voir le message
    Comment ça, ça ne passe pas ? J'ai copié-collé ton code, viré la ligne en question et chez moi tout fonctionne. J'obtiens un fichier comme il faut. Peut-être que le code que tu as posté n'est pas le même que celui que tu utilises ? D'ailleurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le test if (fichier != NULL)
    est effectué deux fois.

    Si j'épure ton code, ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define LG_CHAINE 1000
     
    int main() {
        char chaine[LG_CHAINE] = "";
        int nbre = 0, resultat = 0;
        FILE* fichier = NULL;
     
        printf("input your directory file to save\n");
        printf("for example '/directory/file_to_save':");
        scanf("%s", &chaine);
        fichier = fopen(chaine, "w+");
        srand(time(NULL));
        if (fichier != NULL)
        {
            printf("How number do you want to generate?:");
            scanf("%d", &nbre);
            fprintf(fichier, "Random number\n");
            for (int i = 0; i < nbre; i++)
            {
                resultat = rand() % 10;
                fprintf(fichier, "%d", resultat);
            }
            fclose(fichier);
            printf("File created with success!\n");
        }
        else
            printf("creating file failed,unknow directory.Try again later!\n");
        return 0;
    }
    Et un conseil, si ton choix de langage n'est pas imposé, change de C à C++, ce sera sans doute plus simple pour débuter.

    c'est gentille de ta part, suite a ton analyse j'ai pu comprendre que le freopen() n'avait pas sa place.
    je crois que jai bien compris l'explication maintenant du freopen() sur google.

    voici j'ai essayer et il marche nickel mais j'ai modifier. merci infiniment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define CHAINE 1000
     
    int nbre_aleatoire();
    int main(void){
     
      char nom_fich[CHAINE];
      int nbre = 0;
     
      printf("Enregistrez votre fichier '/repertoire/fichier':");
      scanf("%s", &nom_fich);
      printf("Combien de nombre voudriez vous avoir dans le fichier?:");
      scanf("%d", &nbre);
     
      FILE *fichier = NULL;
      fichier = fopen(nom_fich, "a+");
     
      srand(time(NULL));
     
      if (fichier)
      {
        for(int i =0 ; i < nbre; i++)
        {
          fprintf(fichier, "%d", rand()%10);
          }
     
        printf("Fichier crée avec succès!\n");
      }
     
      else
        fprintf(stderr, "Erreur de creation du fichier!\n");
     
      fclose(fichier);
     
      return 0;
    }
    Au délà des codes de language, il y a la reflexion!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Ecrire dans plusieurs cellules avec une fonction
    Par seblenor dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/04/2013, 22h00
  2. ecrire dans un textarea avec une fonction
    Par nico le noob dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/05/2010, 16h46
  3. Réponses: 5
    Dernier message: 12/03/2010, 11h03
  4. Ecrire dans un fichier avec une fonction itérative.
    Par katcha95 dans le forum Débuter
    Réponses: 6
    Dernier message: 22/11/2009, 18h40
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo