Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème sur un test avec les structures

Sujet résolu
    19 avril 2006 à 12:12:48

    Citation : Pierre89

    Donc en fait sizeof marcherait avec un tableau et pas strlen() ? c'est ça ?


    Absolument. L'unité de compte est le byte (même taille qu'un char, soit 1, comme toute unité qui se respecte). Cela signifie que la taille d'un tableau de char est identique à son nombre d'élements. Ce n'est évidemment pas vrai avec les autres types.

    Soit
    int a[N];

    sizeof a retourne N * sizeof (int).
    Pour obtenir N (le nombre d'élements), il faut diviser la taille du tableau en bytes par la taille d'un des éléments (en bytes), soit une de ces solutions :
    sizeof a / sizeof a[0]
    sizeof a / sizeof a[N-1]
    sizeof a / sizeof a[N]
    sizeof a / sizeof a[123456]
    sizeof a / sizeof a[i]

    ou (et c'est la solution la plus simple)
    sizeof a / sizeof *a


    Citation : Ze moi

    j'ai raison à propos des flux et tampons?


    Oui.

    Citation : Ze moi

    strlen, c'est que pour les char [] initialisés


    strlen() ne fonctionne que sur les chaines valides initialisées.
    Rappel, une chaine est un tableau de char initialisé terminé par un 0.

    • Partager sur Facebook
    • Partager sur Twitter
    Music only !
      19 avril 2006 à 12:40:44

      ou (et c'est la solution la plus simple)
      sizeof a / sizeof *a

      *a c'est quoi ? le pointeur sur la première case du tableau ?
      • Partager sur Facebook
      • Partager sur Twitter
        19 avril 2006 à 13:25:17

        je commence à comprendre à peu près tout le code mais à quoi sert d'avoir dans un fichier(stdout) se que le programme fait?
        Et à quoi ça sert de mettre, ce que rentre l'utilisateur, dans un fichier stdin?
        Comment est-il possible que '\n' soit enregistrè dans stdin?
        Enfin, dans le code suivant, tu/vous continues/z la boucle tant que c != '\n' or tu/vous as/vez vérifié auparavant qu'il n'y avait pas de '\n'.
        static void clean (char *s, FILE *fp)
        {
           /* search ... */
           char *p = strchr (s, '\n');
           if (p != NULL)
           {
              /* ... and kill */
              *p = 0;
           }
           else
           {
              /* purge */
              int c;
              while ((c = fgetc(fp)) != '\n' && c != EOF)
              {
              }
           }
        }
        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2006 à 13:29:11

          stdin c'est le clavier.
          Appuyer sur entrée rajoute un \n.
          Dans le premier cas il vérifie si le \n est dans la chaine retournée par le fgets, si il est on le vire, sinon ça veut dire qu'il est encore dans le flux, donc on lit dans le vent le flux jusqu'à sa fin (\n ou EOF) pour que les prochaines lectures soient propres.
          • Partager sur Facebook
          • Partager sur Twitter
            19 avril 2006 à 13:43:18

            est-ce que le deuxième paramètre de sscanf doit dire se que doit contenir la chaine?
            Que signifie donc, "%d"?
            Que signifie le troisième paramètre?
            • Partager sur Facebook
            • Partager sur Twitter
              19 avril 2006 à 15:08:40

              Citation : Pierre89

              ou (et c'est la solution la plus simple)

              sizeof a / sizeof *a


              *a c'est quoi ? le pointeur sur la première case du tableau ?


              Non.

              • a est l'adresse de la première case du tableau : a + 0
              • *a est la première case du tableau. : *(a + 0) = *(a) = *a
              • Partager sur Facebook
              • Partager sur Twitter
              Music only !
                19 avril 2006 à 21:00:31

                Citation : patxiku

                est-ce que le deuxième paramètre de sscanf doit dire se que doit contenir la chaine?
                Que signifie donc, "%d"?
                Que signifie le troisième paramètre?

                • Partager sur Facebook
                • Partager sur Twitter
                  19 avril 2006 à 22:08:58

                  Citation : patxiku

                  Citation : patxiku

                  est-ce que le deuxième paramètre de sscanf doit dire se que doit contenir la chaine?
                  Que signifie donc, "%d"?
                  Que signifie le troisième paramètre?


                  Tu n'as donc pas de livre de C?

                  http://dpobel.free.fr/man/html/affiche_man.php/3403/man/sscanf/

                  bookmark ce site, il est très pratique...


                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    19 avril 2006 à 23:03:03

                    non je n'en ai pas ça fait pas longtemps que j'ai commencer le C.
                    j'attend de finir les cours de mateo puis seulement après je vais m'enrichire e fin si j'y arrive.
                    Une dernière question, est-ce normal que je me mélange entre les languages. Je sais que le php et C ne sont pas pareil mais quand je me sius remit au php j'avais du mal à savoir comment gérer les variables ect ... c'était un peu flou et mélanger avec C (dans ma tête)... :o

                    Edit: J'ai fait un code pour travailler la lecture et l'écriture dans les fichiers en utilisant se que je viens d'apprendre. Est-ce comme ça qu'il faut l'utiliser:
                    (par contre il y a un bug quand je veux afficher le contenu du fichier ben la console me demende d'entrer quelque chose
                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <string.h>

                    static void clean(char* s, FILE* fichier)
                    {
                        char* p = strchr(s, '\n');

                        if(p != NULL)
                        {
                            *p = 0;
                        }
                        else
                        {
                            int c;

                            while((c = fgetc(fichier)) != '\n' && c != EOF)
                            {
                            }
                        }
                    }

                    int main(int argc, char *argv[])
                    {
                        FILE* fichier = NULL;
                        fichier = fopen("test.txt", "r+");

                        if(fichier != NULL)
                        {
                            //Ecriture dans le fichier
                            {
                                char chaine[100];

                                printf("Veuillez ecrire une phrase : ");
                                fflush(stdout);
                                fgets(chaine, sizeof chaine, stdin);
                                clean(chaine, stdin);

                                fputs(chaine, fichier);
                            }

                            //Lecture du fichier
                           {
                                char chaine[100];

                                fgets(chaine, sizeof chaine, fichier);

                                printf("text.txt contien : %s", chaine);
                                fflush(stdout);
                           }

                           fclose(fichier);
                        }

                        getchar();
                        return 0;
                    }


                    Bonne nuit à tous!!
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 avril 2006 à 0:08:49

                      Citation : patxiku

                      J'ai fait un code pour travailler la lecture et l'écriture dans les fichiers en utilisant se que je viens d'apprendre. Est-ce comme ça qu'il faut l'utiliser:


                      Presque, mais pour relire, il faut d'abord revenir au début :
                         rewind (fichier);

                      Mais quoiqu'en dise M@teo, (je rvendique le droit de ne pas être d'accord avec lui) je déconseille formellement les modes '+' aux débutants. Trop de risque de destruction de fichier. Je conseille les modes "r", "w" et "a". Avec fermeture avant de passer à l'autre mode. C'est beaucoup plus sûr.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                      Anonyme
                        20 avril 2006 à 8:27:18

                        Citation : patxiku

                        non je n'en ai pas ça fait pas longtemps que j'ai commencer le C.
                        j'attend de finir les cours de mateo puis seulement après je vais m'enrichire e fin si j'y arrive.
                        Une dernière question, est-ce normal que je me mélange entre les languages. Je sais que le php et C ne sont pas pareil mais quand je me sius remit au php j'avais du mal à savoir comment gérer les variables ect ... c'était un peu flou et mélanger avec C (dans ma tête)... :o

                        Edit: J'ai fait un code pour travailler la lecture et l'écriture dans les fichiers en utilisant se que je viens d'apprendre. Est-ce comme ça qu'il faut l'utiliser:
                        (par contre il y a un bug quand je veux afficher le contenu du fichier ben la console me demende d'entrer quelque chose

                        #include <stdio.h>
                        #include <stdlib.h>
                        #include <string.h>

                        static void clean(char* s, FILE* fichier)
                        {
                            char* p = strchr(s, '\n');

                            if(p != NULL)
                            {
                                *p = 0;
                            }
                            else
                            {
                                int c;

                                while((c = fgetc(fichier)) != '\n' && c != EOF)
                                {
                                }
                            }
                        }

                        int main(int argc, char *argv[])
                        {
                            FILE* fichier = NULL;
                            fichier = fopen("test.txt", "r+");

                            if(fichier != NULL)
                            {
                                //Ecriture dans le fichier
                                {
                                    char chaine[100];

                                    printf("Veuillez ecrire une phrase : ");
                                    fflush(stdout);
                                    fgets(chaine, sizeof chaine, stdin);
                                    clean(chaine, stdin);

                                    fputs(chaine, fichier);
                                }

                                //Lecture du fichier
                               {
                                    char chaine[100];

                                    fgets(chaine, sizeof chaine, fichier);

                                    printf("text.txt contien : %s", chaine);
                                    fflush(stdout);
                               }

                               fclose(fichier);
                            }

                            getchar();
                            return 0;
                        }



                        Bonne nuit à tous!!


                        Pour le C et le PHP c'est normal, le PHP a été fait à partir du C
                        Sinon pour ton programme je vois pas
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 avril 2006 à 8:52:42

                          ça me met une erreur quand après j'appuye sur entrée:
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <string.h>

                          static void clean(char* s, FILE* fichier)
                          {
                              char* p = strchr(s, '\n');

                              if(p != NULL)
                              {
                                  *p = 0;
                              }
                              else
                              {
                                  int c;

                                  while((c = fgetc(fichier)) != '\n' && c != EOF)
                                  {
                                  }
                              }
                          }

                          int main(int argc, char *argv[])
                          {
                          //Ecriture dans le fichier

                              FILE* fichier = NULL;
                              fichier = fopen("test.txt", "w");

                              if(fichier != NULL)
                              {

                                  char chaine[100];

                                  printf("Veuillez ecrire une phrase : ");
                                  fflush(stdout);
                                  fgets(chaine, sizeof chaine, stdin);
                                  clean(chaine, stdin);

                                  fputs(chaine, fichier);
                              }
                              fclose(fichier);

                          //Lecture du fichier
                              fichier = NULL;
                              fichier = fopen("test.txt", "r");

                              if(fichier =! NULL)
                              {
                                  char chaine[100];

                                  fgets(chaine, sizeof chaine, fichier);

                                  printf("text.txt contien : %s", chaine);
                                  fflush(stdout);
                              }
                              fclose(fichier);


                              getchar();
                              return 0;
                          }
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            20 avril 2006 à 8:58:28

                            Après le fgets?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 avril 2006 à 9:41:40

                              Citation : patxiku

                              ça me met une erreur quand après j'appuye sur entrée:


                                  if(fichier =! NULL)

                              Mais c'est quoi ça ?

                              if(fichier != NULL)
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Music only !
                                20 avril 2006 à 12:40:47

                                ha oui erreur de frappe.
                                Jre crois que à partir de maintenant je vais relire 3 fois avant de poster un problème.
                                Merci à tous pour votre aide.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                problème sur un test avec les structures

                                × 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