Aller directement au contenu
  • Catégories
  • Récent
  • Mots-clés
  • Populaire
  • Web
  • Utilisateurs
  • Groupes
Habillages
  • Clair
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Sombre
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Défaut (Aucun habillage)
  • Aucun habillage
Réduire
Melinyel

Melinyel

  1. Accueil
  2. Programmation
  3. Développement de logiciels
  4. C
  5. [Question] Un FILE* en argument de fonction

[Question] Un FILE* en argument de fonction

Planifié Épinglé Verrouillé Déplacé C
14 Messages 4 Publieurs 3.9k Vues
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • D Hors-ligne
    D Hors-ligne
    davydavek
    a écrit sur dernière édition par
    #2

    Je pense que le problème vient du premier argument de ta fonction, ce n'est pas un FILE*, mais un tableau de 400 FILE*. Je pense que enlever le " [400] " après "monFichier" devrait le résoudre.

    C# dev

    github.com/DavyWk

    1 réponse Dernière réponse
    1
    • AlexMogA Hors-ligne
      AlexMogA Hors-ligne
      AlexMog
      Modérateur spécialisé
      a écrit sur dernière édition par
      #3

      Je pense que le problème vient du premier argument de ta fonction, ce n'est pas un FILE*, mais un tableau de 400 FILE*. Je pense que enlever le " [400] " après "monFichier" devrait le résoudre.

      +1, je rajoutes aussi que tu es en C, essaye de respecter les normes internationales qui ont été mises en place, elles sont pas là pour rien.

      (Pour info, les normes sont: ansiC et isoC).

      Pour vérifier que ton code respecte bien tout, et pour éviter des futures erreurs, je te conseille de compiler avec les flags suivants (sous gcc):

      -W -Wall -Werror -pedantic -ansi

      Tu verra, tu évite 90% des problèmes communs (comme la non initialisation des vars, le pointage foireux, etc...)

      Multiplayer GameDev @ Unexpected

      Mon CV

      1 réponse Dernière réponse
      2
      • nellN Hors-ligne
        nellN Hors-ligne
        nell
        a écrit sur dernière édition par
        #4

        Merci! c'était une des erreurs et ça m'a permis de trouver l'autre du coup:

        i = fgetc(nomFichier);

        j = fgetc(nomFichier);

        i et j prennent la valeur ascii du caractère, du coup après ça fait grille[48][53] et ça fait planter vu que la grille est une [9][9]

        Maintenant faut voir comment convertir, c'est là que je me dis que le Python c'était vachement pratique en fait x) Apparemment ce serait à faire avec sscanf

        What is the ratio of the time I spend solving problems to the time I spend scaling successes?

        1 réponse Dernière réponse
        0
        • D Hors-ligne
          D Hors-ligne
          davydavek
          a écrit sur dernière édition par
          #5

          Les chiffres de 0 a 9 inclusif sont au indexes 48-57 de la table ASCII, il suffit donc de soustraire 48 au caractère.

          ex:

          '1' = 49

          49 -  48 = 1

          '6' = 54

          54 - 48 = 6

          C# dev

          github.com/DavyWk

          1 réponse Dernière réponse
          1
          • nellN Hors-ligne
            nellN Hors-ligne
            nell
            a écrit sur dernière édition par
            #6

            Ah oui ça facilite tout en faisant comme ça en fait x)

            Merci beaucoup alors, la fonction marche exactement comme il faut 😄

            What is the ratio of the time I spend solving problems to the time I spend scaling successes?

            1 réponse Dernière réponse
            0
            • D Hors-ligne
              D Hors-ligne
              davydavek
              a écrit sur dernière édition par
              #7

              De rien, n’hésites pas a demander de l'aide si tu as d'autres questions 😉

              C# dev

              github.com/DavyWk

              1 réponse Dernière réponse
              0
              • AlexMogA Hors-ligne
                AlexMogA Hors-ligne
                AlexMog
                Modérateur spécialisé
                a écrit sur dernière édition par
                #8

                Les chiffres de 0 a 9 inclusif sont au indexes 48-57 de la table ASCII, il suffit donc de soustraire 48 au caractère.

                ex:

                '1' = 49

                49 -  48 = 1

                '6' = 54

                54 - 48 = 6

                La fonction atoi fais le café aussi à ce niveau là 😉 .

                Multiplayer GameDev @ Unexpected

                Mon CV

                1 réponse Dernière réponse
                0
                • D Hors-ligne
                  D Hors-ligne
                  davydavek
                  a écrit sur dernière édition par
                  #9

                  fgetc retourne un int directement,  et atoi requiert un char*, donc dans ce cas ce n'est pas vraiment utile de l'utiliser

                  C# dev

                  github.com/DavyWk

                  1 réponse Dernière réponse
                  0
                  • AlexMogA Hors-ligne
                    AlexMogA Hors-ligne
                    AlexMog
                    Modérateur spécialisé
                    a écrit sur dernière édition par
                    #10

                    fgetc retourne un int directement,  et atoi requiert un char*, donc dans ce cas ce n'est pas vraiment utile de l'utiliser

                    Effectivement, autant pour moi.

                    La technique du 48 fonctionne, mais il es plus conseillé d'utiliser directement la valeur du char, comme ceci:

                    49 - '0' = 1.

                    (ce qui se traduit par '1' - '0' = 1).

                    Voilàà:

                    Multiplayer GameDev @ Unexpected

                    Mon CV

                    1 réponse Dernière réponse
                    1
                    • nellN Hors-ligne
                      nellN Hors-ligne
                      nell
                      a écrit sur dernière édition par
                      #11

                      Hmm ok la différence de 2 char donne un int alors? c'est toujours bon à savoir 🙂

                      Je suis pratiquement à la fin du projet mais je bute sur un petit truc

                      On a un int qui ressemble à ça:  grille[x][y].tab[z] (il a une valeur entre 0 et 9)

                      Le prof veut qu'on rende égal grille[x][y].tab à NULL

                      Seulement quand je le fais ça me dit que je peux pas assigner un void a un int.

                      Alors j'ai testé *grille[x][y].tab=NULL Mais j'ai fait ça au hasard et je sais pas si c'est juste, vous auriez une idée?

                      EDIT: J'ai mis la première case= '\0', on verra bien ce que ça donne

                      What is the ratio of the time I spend solving problems to the time I spend scaling successes?

                      1 réponse Dernière réponse
                      0
                      • AlexMogA Hors-ligne
                        AlexMogA Hors-ligne
                        AlexMog
                        Modérateur spécialisé
                        a écrit sur dernière édition par
                        #12

                        Hmm ok la différence de 2 char donne un int alors? c'est toujours bon à savoir 🙂

                        Je suis pratiquement à la fin du projet mais je bute sur un petit truc

                        On a un int qui ressemble à ça:  grille[x][y].tab[z] (il a une valeur entre 0 et 9)

                        Le prof veut qu'on rende égal grille[x][y].tab à NULL

                        Seulement quand je le fais ça me dit que je peux pas assigner un void a un int.

                        Alors j'ai testé *grille[x][y].tab=NULL Mais j'ai fait ça au hasard et je sais pas si c'est juste, vous auriez une idée?

                        EDIT: J'ai mis la première case= '\0', on verra bien ce que ça donne

                        Alors, pas du tout, un char moins un char = un char.

                        N'oublie pas qu'un char, c'est une valeur numérique d'un octet. (La différence, c'est qu'un int, cest 4 octets)

                        La conversion théorique de char en int est possible grâce à un cast. Le contraire peux provoquer des résultats surprenants si l'int dépasse 127 😉 . (ou 255 pour les unsigned)

                        Pour le NULL, n'oublie pas que NULL != 0.

                        En faite, NULL corresponds à une adresse mémoire, 0 à un int. (c'est un peu contradictoire, vue qu'une adresse mémoire est un int, mais là n'est pas la question, c'est pour bien séparer l'adresse NULL d'un simple 0).

                        Ainsi, un int peux avoir pour valeur 0, mais pas NULL.

                        A contrario, un pointeur peux avoir la valeur NULL et 0.

                        Multiplayer GameDev @ Unexpected

                        Mon CV

                        1 réponse Dernière réponse
                        1
                        • arcanumA Hors-ligne
                          arcanumA Hors-ligne
                          arcanum
                          a écrit sur dernière édition par
                          #13

                          255 c'est déjà un unsigned char (2^8 - 1), le char signé il monte jusqu'à 127 (2^7 - 1, puisque il y a un bit de signe)

                          Après pour le NULL il me semble que c'est juste un alias soit pour 0 soit pour (void*)0, la différence c'est pour la lisibité du code et savoir qu'on manipule un pointeur.

                          Sinon Nell tu peux utiliser memset(grille[x][y].tab, 9, 0);  si tu veux l'initialiser à 0 🙂

                          Code : <https://github.com/thearcanum>

                          Les brises de l'aube ont des secrets à te raconter. Ne te rendors pas !

                          1 réponse Dernière réponse
                          1
                          • AlexMogA Hors-ligne
                            AlexMogA Hors-ligne
                            AlexMog
                            Modérateur spécialisé
                            a écrit sur dernière édition par
                            #14

                            255 c'est déjà un unsigned char (2^8 - 1), le char signé il monte jusqu'à 127 (2^7 - 1, puisque il y a un bit de signe)

                            Après pour le NULL il me semble que c'est juste un alias soit pour 0 soit pour (void*)0, la différence c'est pour la lisibité du code et savoir qu'on manipule un pointeur.

                            Sinon Nell tu peux utiliser memset(grille[x][y].tab, 9, 0);  si tu veux l'initialiser à 0 🙂

                            Décidément, faut vraiment que je dorme de temps à autres... En plus; j'ai bien précisé que c'était un octet u_u, faut vraiment que j'aille me coucher... XD

                            +1 pour le memset, après y'a toujours la technique de l'auto-memset via init du C ({0}) \o/.

                            Sinon oui, NULL est un define sur (void*)0 (tout comme TRUE est un define sur 1 et FALSE sur 0). Il est effectivement utilisé pour la lisibilité du code.

                            Multiplayer GameDev @ Unexpected

                            Mon CV

                            1 réponse Dernière réponse
                            1

                            Bonjour ! Vous semblez intéressé par cette conversation, mais vous n’avez pas encore de compte.

                            Marre de refaire défiler les mêmes messages ? Créez un compte pour retrouver votre position, recevoir des notifications des nouvelles réponses, sauvegarder vos favoris et voter pour les messages que vous appréciez.

                            Grâce à votre participation, ce message peut devenir encore meilleur 💗

                            S'inscrire Se connecter
                            Répondre
                            • Répondre à l'aide d'un nouveau sujet
                            Se connecter pour répondre
                            • Du plus ancien au plus récent
                            • Du plus récent au plus ancien
                            • Les plus votés


                            • Se connecter

                            • Connectez-vous ou inscrivez-vous pour faire une recherche.
                            Powered by NodeBB Contributors
                            • Premier message
                              Dernier message
                            0
                            • Catégories
                            • Récent
                            • Mots-clés
                            • Populaire
                            • Web
                            • Utilisateurs
                            • Groupes