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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif 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
    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;
    }

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    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
    Membre actif 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
    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??

  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
    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.

  5. #5
    Membre actif 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
    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;
    }

  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
    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

+ 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