Partage
  • Partager sur Facebook
  • Partager sur Twitter

zWc

    2 avril 2010 à 20:36:01

    Citation : Lithrein


    nom de la fonction est wordCount, non ? Ou tu a fait exprès de marquer world à la place de word.


    Non, je ne l'ai pas fait exprès... :honte:(c'était un poisson d'avril... Non? désolé)

    @Marc Mongenet:
    Avec quelle entrée?
    Je t'avoue que je suis loin d'être sur de mon truc...

    @Lithrein:
    Je vois ce que tu veux dire...
    On pourrait faire peur à une personne qui voudrait poster un code pour les niveaux 1 et 2?
    Quelques solutions possibles
    • On s'interdit de poster un code pendant une semaine
    • On revient au principe des solutions envoyées à réponse


    Pour finir, pourquoi ce limiter à des exercices pour débutants? Et, comment définir un débutant?
    Qui désire des exercices?

    Pour les commentaires, tu as tout à fait raison...
    • Partager sur Facebook
    • Partager sur Twitter
    Zeste de Savoir, le site qui en a dans le citron !
      2 avril 2010 à 20:55:38

      Citation : GurneyH

      • On s'interdit de poster un code pendant une semaine

      C'est ce qui avait été dit. :)
      • Partager sur Facebook
      • Partager sur Twitter
        2 avril 2010 à 21:19:36

        Citation : GurneyH

        @Lithrein:
        Je vois ce que tu veux dire...
        On pourrait faire peur à une personne qui voudrait poster un code pour les niveaux 1 et 2?
        Quelques solutions possibles

        • On s'interdit de poster un code pendant une semaine
        • On revient au principe des solutions envoyées à réponse



        Pour finir, pourquoi ce limiter à des exercices pour débutants? Et, comment définir un débutant?
        Qui désire des exercices?

        Pour les commentaires, tu as tout à fait raison...



        Pour les commentaires, je parle surtout des parties délicates ou peu communes car là vos code étaient dénués de commentaires ce qui peut faire peur au débutants, le problème est que plus on est bon, moins on met de commentaires ... :-°

        S'interdire de poster pendant une semaine, pourquoi pas ? Mais c'est quand même dommage.
        Autrement, je suis contre le fait d'envoyer sa réponse à Réponse car on perd tout les conseils de la communauté que ne fera pas forcément le "correcteur".

        Dernièrement, ce n'est pas vraiment les débutants qui demande des exercices mais faire des exercices qui leur soient accessibles et bien à mon avis ?
        Une solution, serait de proposer deux exercices : un simple pour les débutants et un autre assez costaud pour les plus avancés.
        • Partager sur Facebook
        • Partager sur Twitter
          2 avril 2010 à 21:26:28

          Salut, je viens poster ma réponse à l'exercice

          #include <stdio.h>
          #include <stdlib.h>
          #include <string.h>
          
          typedef enum{ FALSE = 0, TRUE = 1} BOOL;
          
          char pluriel(int i)
          {
              return (i == 1) ? '\0' : 's';
          }
          
          void help()
          {
              fprintf(stderr, "Usage : wc [-l] [-w] [-c] [FICHIER]\n");
              exit(EXIT_FAILURE);
          }
          
          void wordcount(FILE * stream, BOOL options[3])
          {
              int isFirstArgument = 1;
              int wordcount = 1;
              int charcount = 0;
              int linecount = 1;
              char c, temp;
              char separators[] = " \r\t\n";
              while((c = fgetc(stream)) != EOF){
                  if(c == '\r' || c == '\n'){
                      linecount++;
                  }
                  if(strchr(separators, temp) && !strchr(separators, c)){
                      wordcount++;
                  }
                  charcount++;
                  temp = c;
              }
              puts("\n");
              if(options[0] == TRUE){
                  printf("%d ligne%c", linecount, pluriel(linecount));
                  isFirstArgument = 0;
              }
              if(options[1] == TRUE){
                  if(!isFirstArgument){
                      printf(", %d mot%c", wordcount, pluriel(wordcount));
                  }
                  else{
                      printf("%d mot%c", wordcount, pluriel(wordcount));
                  }
                  isFirstArgument = 0;
              }
              if(options[2] == TRUE){
                  if(!isFirstArgument){
                      printf(", %d caractere%c", charcount, pluriel(charcount));
                  }
                  else{
                      printf("%d caractere%c", charcount, pluriel(charcount));
                  }
                  isFirstArgument = 0;
              }
              if(options[0] == FALSE && options[1] == FALSE && options[2] == FALSE){
                  printf("%d ligne%c, %d mot%c, %d caractere%c", linecount, pluriel(linecount), wordcount, pluriel(wordcount), charcount, pluriel(charcount));
              }
              puts("\n");
          }
          
          int main(int argc, char *argv[])
          {
              int i;
              int j;
              BOOL options[3] = {FALSE, FALSE, FALSE};
              FILE *input_stream = stdin;
              if(argc > 1){
                  for(i=1; i<argc; i++){
                      if(argv[i][0] == '-'){
                          if(strlen(argv[i]) >= 2){
                              for(j=1; j<strlen(argv[i]); j++){
                                  switch(argv[i][j]){
                                      case 'l':
                                      options[0] = TRUE;
                                      break;
          
                                      case 'w':
                                      options[1] = TRUE;
                                      break;
          
                                      case 'c':
                                      options[2] = TRUE;
                                      break;
          
                                      case 'h':
                                      help();
                                      break;
          
                                      default:
                                      help();
                                      break;
                                  }
                              }
                          }
                      }
                  }
                  if(argv[argc-1][0] != '-'){
                      if(!(input_stream = fopen(argv[argc-1], "r"))){
                          fprintf(stderr, "fopen: %s n'existe pas", argv[argc-1]);
                          exit(EXIT_FAILURE);
                      }
                  }
              }
              wordcount(input_stream, options);
              return 0;
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            2 avril 2010 à 21:37:11

            @simpsonmaniac : Ce serait bien de commencer par le début plutôt que par la fin, non ? Tu t'apercevrais sûrement que tu peux faire beaucoup plus simple. Au passage '\r' tout seul ne signifie en aucun cas un retour à la ligne.
            • Partager sur Facebook
            • Partager sur Twitter
              2 avril 2010 à 21:39:53

              Ah mais je t'assure que j'ai fait le début et ça marchait alors j'ai transposé (bon je vais voir comment je pourrais réduire)
              • Partager sur Facebook
              • Partager sur Twitter
                2 avril 2010 à 22:02:09

                @simpsonmaniac : Je te conseille de tout poster de manière à recevoir des commentaires précis sur chaque exercice plutôt que de donner le code final directement.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 avril 2010 à 22:11:06

                  Citation : Lithrein


                  @Marc :


                  • Je trouve dommage que tu utilise le C99 car peu de compilateurs compileront ton code. Mais bon, je pense que tu le sais déjà.

                  • Ensuite, la façon dont tu gères le pluriel est originale, bien que ce soit possible, on rencontre peu souvent cette méthode, de plus tu te complique la vie :
                    printf("%s", &"s"[x<2])
                    est équivalent à :
                    printf("%c", "s"[x<2])



                  Pour le C99, penses-tu au format %zu de printf, ou autre chose qui m'aurait échappé?

                  Pour le printf("%c", "s"[x<2]) , ça affiche 's' ou '\0'. Le résultat de l'affichage de '\0' est-il défini?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 avril 2010 à 22:21:56

                    Pour le C99, je faisais en effet référence au format %zu du printf.
                    Le résultat de l'affichage du zéro est défini, il appartient au tableau de caractères.

                    Edit : En fait, ma dernière phrase ne veut pas dire grand chose :-° . Je voulais seulement dire que tu pouvait accéder au '\0' puisqu'il appartient à la chaine "s" (il la termine). Je ne m'avance pas plus sur son affichage bien que cela semble fonctionner correctement.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 avril 2010 à 22:38:03

                      Citation : Marc Mongenet


                      Le résultat de l'affichage de '\0' est-il défini?



                      #include <stdio.h>
                      
                      int main(void)
                      {
                      printf("%d\n", printf("%c",'\0'));
                          return 0;
                      }
                      



                      $ gcc -g -W -Wall -std=c89 -pedantic -o x sdz.c; ./x
                      1
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 avril 2010 à 22:59:38

                        Citation : Lithrein

                        Le résultat de l'affichage du zéro est défini, il appartient au tableau de caractères.


                        Qu'appelles-tu «tableau de caractères» au juste? J'ai cherché un peu dans la norme, mais je n'ai rien trouvé de précis à ce sujet. Je n'ose pas imprimer un '\0' de peur que ça m'imprime un espace blanc sur certains systèmes (comme il semble que ce soit le cas sur http://en.wikipedia.org/wiki/File:Codepage-437.png ), ou un truc encore plus bizarre.


                        @dark-lord :
                        22:03:08 marc@pc /tmp
                        ./a.out vide
                                1 ligne(s) 0 mot(s) 0 caractere(s)22:03:11 marc@pc /tmp

                        Il manque un retour à la ligne et ça compte une ligne même sur une entrée vide.
                        L'affichage avec l'option -h est aussi un peu bizarre.
                        ./a.out -h vide
                        myWC [-l] [-w] [-c] [FILENAME]
                                22:05:02 marc@kameha /tmp

                        Et si je mets -h tout seul, je dois envoyer un EOF à la main. Idem en cas d'option inconnue. Si je donne deux noms de fichier, ça n'affiche rien. Si je donne un nom de fichier faux:
                        22:11:39 marc@kameha /tmp
                        ./a.out yapa
                        Erreur : Aucun fichier trouve.        32767 ligne(s) 0 mot(s) 0 caractere(s)22:11:40 m
                        arc@pc /tmp




                        @GurneyH: Le if(argc > 2 || argv[argc - 1][0] != '-') efface les flags lorsque je lance ./a.out ou ./a.out fichier.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 avril 2010 à 23:27:44

                          Citation : Marc Mongenet

                          Citation : Lithrein

                          Le résultat de l'affichage du zéro est défini, il appartient au tableau de caractères.


                          Qu'appelles-tu «tableau de caractères» au juste? J'ai cherché un peu dans la norme, mais je n'ai rien trouvé de précis à ce sujet.




                          Citation : C99

                          5.2 Environmental considerations 5.2.1 Character sets
                          1 Two sets of characters and their associated collating sequences shall be defined: the set in which source files are written (the source character set), and the set interpreted in the execution environment (the execution character set).





                          Citation : Marc Mongenet


                          Qu'appelles-tu «tableau de caractères» au juste? J'ai cherché un peu dans la norme, mais je n'ai rien trouvé de précis à ce sujet. Je n'ose pas imprimer un '\0' de peur que ça m'imprime un espace blanc sur certains systèmes



                          J'en doute fort. Quand tu sais que toute chaîne littérale est gardée par un zéro, tu te doutes bien que l'affichage de 0 est parfaitement défini. Le caractère 0 est parfaitement défini :

                          Citation : C99

                          A byte with all bits set to 0, called the null character, shall exist in the basic execution character set; it is used to terminate a character string.


                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 avril 2010 à 23:53:44

                            Citation : candide

                            J'en doute fort.


                            Et tu as évidemment tort.

                            Citation : candide


                            Citation : C99

                            A byte with all bits set to 0, called the null character, shall exist in the basic execution character set; it is used to terminate a character string.



                            Mais ça ne dit pas qu'on peut l'afficher. D'ailleurs ce paragraphe dit qu'il termine une chaîne et dans ce cas il n'est jamais affiché.

                            Le chapitre qui nous intéresse est plutôt le 5.2.2 Character display semantics. Sachant que '\0' n'est pas un printing character et qu'il n'y a pas de séquence d'échappement alphabétique définie pour '\0' (contrairement à '\a', '\n', etc.) et que je ne vois rien d'autre, j'ai du mal à conclure que l'impression de '\0' donne quelque-chose de bien défini.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              3 avril 2010 à 1:53:29

                              Citation : Marc Mongenet

                              Citation : candide

                              J'en doute fort.


                              Et tu as évidemment tort.



                              En attendant moi je t'ai donné des arguments. Je répète :

                              1°) toute chaîne littérale telle que "toto" contient un caractère nul
                              2°) selon la Norme elle-même la fonction printf est qualifiée byte output function
                              3°) le comportement de ces fonctions est équivalent à des appels successifs à la fonction fputc (texto dans la Norme)

                              J'en déduis donc que chaque fois que tu affiches une chaîne, tu affiches le caractère nul. Donc, il est extrêmement improbable que l'affichage de 0 soit indéterminé.


                              Ceci est confirmé par ce que je t'ai déjà signalé, à savoir :


                              #include <stdio.h>
                              
                              int main(void)
                              {
                                printf("%d\n", printf("%c", '\0'));
                                return 0;
                              }
                              



                              affiche bien 1.


                              Citation : Marc Mongenet


                              Mais ça ne dit pas qu'on peut l'afficher. D'ailleurs ce paragraphe dit qu'il termine une chaîne et dans ce cas il n'est jamais affiché.



                              Je ne vois là aucune contradiction.


                              Citation : Marc Mongenet


                              Le chapitre qui nous intéresse est plutôt le 5.2.2 Character display semantics. Sachant que '\0' n'est pas un printing character



                              C'était bien joué mais tu spécules là. La spécification de la fonction printf est définie dans la sous-clause 7.19 de la Norme. Le retour de la function printf te donne le nombre de caractères affichés. Et figure-toi que la function printf peut même te retourner 1 pour un caractère NON imprimable mais cette fois non pas au sens de la clause 7.19 (stdio.h) mais de la clause 7.4 (ctype.h). Il suffit de faire l'expérience suivante :


                              #include <stdio.h>
                              #include <ctype.h>
                              
                              int main(void)
                              {
                                printf("isprint('\\0')=%d\n", isprint('\0'));
                                printf("%d\n", printf("%c", '\0'));
                                return 0;
                              }
                              




                              $ c99 sdz_.c ; ./x
                              isprint('\0')=0
                              1


                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 avril 2010 à 2:51:08

                                Citation : candide


                                J'en déduis donc que chaque fois que tu affiches une chaîne, tu affiches le caractère nul.


                                Non, c'est le terminateur de chaîne, il n'est pas affiché, ni même transmis à stdout. D'ailleurs :
                                #include <stdio.h>
                                
                                int main(void) {
                                	printf("%d\n", printf(""));
                                	return 0;
                                }
                                

                                affiche 0.

                                Citation : candide


                                #include <stdio.h>
                                
                                int main(void)
                                {
                                  printf("%d\n", printf("%c", '\0'));
                                  return 0;
                                }
                                


                                affiche bien 1.


                                Oui oui, je ne doute pas que le caractère soit transmis à stdout dans ce cas. C'est d'ailleurs bien ce qui me dérange, car je ne voulait rien transmettre, à la base, dans mon code pour zWc...
                                Ou alors, si on me garantit qu'au niveau de l'affichage, transmettre '\0' revient à ne rien transmettre, je veux bien envoyer '\0'. Mais je n'ai rien trouvé dans la norme qui dit ce que '\0' fait, donc je ne prend pas le risque de l'envoyer dans la console jusqu'à plus ample informé.

                                Citation : candide


                                C'était bien joué mais tu spécules là. La spécification de la fonction printf est définie dans la sous-clause 7.19 de la Norme.


                                La spécification de printf me dit d'aller voir fprintf qui me dit que la sortie est écrite dans la stream (stdout en l'occurrence). Quant au retour de printf, c'est le nombre de caractères transmis. Rien de cela ne m'intéresse.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 avril 2010 à 4:28:47

                                  Citation : Marc Mongenet

                                  D'ailleurs :

                                  #include <stdio.h>
                                  
                                  int main(void) {
                                  	printf("%d\n", printf(""));
                                  	return 0;
                                  }
                                  


                                  affiche 0.


                                  Bon, effectivement, c'est assez étonnant.


                                  D'après la spécification de sprintf(), je pense plus précisément à ceci :

                                  Citation : 7.19.6 §3



                                  The format is composed of zero or more directives: ordinary multibyte
                                  characters (not %), which are copied unchanged to the output stream;




                                  et d'après

                                  Citation : C 99, 7.19.1 §5

                                  The byte input/output functions — those functions described in this subclause that
                                  perform input/output: fgetc, fgets, fprintf, fputc, fputs, fread,
                                  fscanf, fwrite, getc, getchar, gets, printf, putc, putchar, puts,
                                  scanf, ungetc, vfprintf, vfscanf, vprintf, and vscanf.



                                  l'effet doit être équivalent à fputc(0). La Norme indique qu'il faut regarder un retour EOF de fputc pour savoir s'il y a eu une erreur d'écriture.

                                  Après, s'il n'y a pas eu d'erreur d'écriture, savoir comment c'est affiché dans telle ou telle console n'est pas du ressort de la Norme.

                                  Citation : Marc Mongenet


                                  Ou alors, si on me garantit qu'au niveau


                                  La Norme ne va rien te garantir concernant l'affichage, elle ne sait même pas ce qu'est une console et on pourrait imaginer qu'elle affiche en braille. Les seules garanties que tu as sont déterminés par les spécifications de fprintf et de fputc. En particulier, si tu utilises le spécificateur %s, la Norme dit que le caractère nul n'est pas écrit mais pour le spécificateur %c, elle ne dit rien de tel et non plus en l'absence de spécificateur.


                                  Citation : Marc Mongenet


                                  La spécification de printf me dit d'aller voir fprintf qui me dit que la sortie est écrite dans la stream (stdout en l'occurrence). Quant au retour de printf, c'est le nombre de caractères transmis.



                                  Si parce que l'écriture est équivalente à des appels successifs à fputc et qu'un retour négatif de fprintf t'indique s'il y a eu une erreur d'écriture.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 avril 2010 à 8:56:12

                                    Citation : Marc Mongenet


                                    @GurneyH: Le if(argc > 2 || argv[argc - 1][0] != '-') efface les flags lorsque je lance ./a.out ou ./a.out fichier.


                                    Effectivement, je m'étais légèrement emmêlé les pinceaux, j'édite et corrige mon code.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Zeste de Savoir, le site qui en a dans le citron !
                                      3 avril 2010 à 11:58:12

                                      Citation : candide

                                      Après, s'il n'y a pas eu d'erreur d'écriture, savoir comment c'est affiché dans telle ou telle console n'est pas du ressort de la Norme.


                                      C'est sur qu'elle ne dit pas grand chose, mais il y a tout de même un chapitre appelé Character display semantics qui parle entre autres de diplay device, active position, line, et pour '\a' : produce an audible or visible alert without cahnging the active position. Bref, elle n'est pas totalement muette non plus.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 avril 2010 à 12:39:38

                                        Scuzez moi de vous interrompre dans votre debat mais il y a un truc qui me chagrine... je voulais savoir si c'etait fait expres ou pas : strlen("Salut les Zer0s.") == 16... hors dans l'enonce il affiche 17 caracteres... Cela veut il dire que lorsque l'on rentre une chaine vide on doit afficher un caractere present ou pas?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          3 avril 2010 à 13:03:11

                                          Oui c'est normal, car pour envoyer EOF, il faut revenir à la ligne donc la bonne réponse est : strlen("Salut les Zeros\n") == 17.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            3 avril 2010 à 13:07:53

                                            Citation : Lithrein

                                            Oui c'est normal, car pour envoyer EOF, il faut revenir à la ligne


                                            Sur mon système je ne suis pas obligé, mais je dois taper deux fois de suite Ctrl-D si je ne viens pas de taper Retour.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 avril 2010 à 13:12:32

                                              Citation : Marc Mongenet

                                              Citation : Lithrein

                                              Oui c'est normal, car pour envoyer EOF, il faut revenir à la ligne


                                              Sur mon système je ne suis pas obligé, mais je dois taper deux fois de suite Ctrl-D si je ne viens pas de taper Retour.



                                              En effet, tapez deux fois Ctrl+D envoie EOF (je ne le savais pas). Mais bon le fait qu'il y ai marqué 17 caractères est expliqué par le fait que je sois revenu à la ligne avant d'envoyer EOF.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                3 avril 2010 à 13:19:29

                                                Citation : Marc Mongenet

                                                mais il y a tout de même un chapitre appelé Character display semantics



                                                Cette section est très courte et n'apprend pas grand chose, elle ne te dit pas même pas comment on affiche le caractère C. Comme il ne semble pas que 0 soit un caractère imprimable et que \0 n'est pas un séquence d'échappement alphabétique, on n'apprend rien sur l'affichage de 0.


                                                Si la question t'empêche de dormir, pose la question sur un forum où il y a des connaisseurs comme clc ou csc. J'ai déjà vérifié et cette question n'a quasiment jamais été posé.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  3 avril 2010 à 13:21:18

                                                  Ah dac, nan parce que j'avais eu ce probleme j'ai donc decide, plutot que de me touner vers EOF (SUB) j'ai decide de me tourner vers EOT... comme ca, pas besoin de retour a la ligne...

                                                  Edit jpense que tu devrais faire un exemple de ce que ca doit afficher avec une ligne vide...
                                                  Car moi actuellement (a cause du '\n') ca m'affiche 1 ligne, 0 mot, 1 caractere
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    3 avril 2010 à 16:56:51

                                                    > Je suis ouvert a toutes critiques sur mon code.
                                                    J'aimerais savoir, aussi, pourquoi j'ai le warning et comment y remédier.
                                                    Emmflo

                                                    EDIT: Merci Lithrein, c'est corrigé.our afficher)
                                                    #include <stdio.h>
                                                    #include <stdlib.h>
                                                    
                                                    void arguments(FILE** fichier, int* ca, int* mo, int* li, int argc, char ** argv)
                                                    {
                                                        int i=1,j=1, c=1;
                                                        for(i=1;i<argc;i++)
                                                        {
                                                            if(argv[i][0]=='-') //Si l'argument est une option
                                                            {
                                                                *mo=1; *ca=1; *li=1;
                                                                while(c!='\0')
                                                                {
                                                                    c=argv[i][j];
                                                                    if(c=='w')
                                                                    *mo=0;
                                                                    if(c=='l')
                                                                    *li=0;
                                                                    if(c=='c')
                                                                    *ca=0;
                                                                    if(c=='h')
                                                                    {
                                                                        printf("Usage : wc [-l] [-w] [-c] [FICHIER]\n");
                                                                        exit(0);
                                                                    }
                                                                    j++;
                                                                }
                                                            }
                                                            else //Sinon c'est le fichier
                                                            *fichier = fopen(argv[i], "r");
                                                        }
                                                    }
                                                    int main(int argc, char ** argv)
                                                    {
                                                        int c = 0, caractere=0, mots=0, precedent=0, ligne=1, ca=0,mo=0,li=0;
                                                        FILE* fichier = NULL;
                                                        arguments(&fichier, &ca, &mo, &li, argc, argv);
                                                        while (c != EOF || c != -1)
                                                        {
                                                            if(fichier != NULL)
                                                            c = fgetc(fichier);
                                                            else
                                                            c = getchar();
                                                            if(c == -1 && fichier!=NULL)
                                                            break;
                                                            if((c==' ' || c=='\t' || c=='\n' || c=='\r' || c==EOF) && caractere != 0)
                                                            {
                                                                if(precedent !=' ' && precedent !='\t' && precedent !='\n' && precedent !='\r')
                                                                mots++;
                                                            }
                                                            if(c=='\n')
                                                            {
                                                                ligne++;
                                                            }
                                                            precedent=c;
                                                            caractere++;
                                                            if(fichier != NULL)
                                                            printf("%c",c);
                                                        }
                                                        if(fichier == NULL && caractere!=0)
                                                        caractere--; //on enlève le caractère "EOF"
                                                        if(caractere==0)
                                                        ligne=0;
                                                    
                                                        if(mo==0 && mots>1)
                                                        printf("\n%d mots.",mots);
                                                        else if(mo==0 && mots<=1)
                                                        printf("\n%d mot.",mots);
                                                    
                                                        if(li==0 && ligne>1)
                                                        printf("\n%d lignes.",ligne);
                                                        else if(li==0 && ligne<=1)
                                                        printf("\n%d ligne.",ligne);
                                                    
                                                        if(ca==0 && caractere>1)
                                                        printf("\n%d caractères.",caractere);
                                                        else if(ca==0 && caractere<=1)
                                                        printf("\n%d caractère.",caractere);
                                                    
                                                        printf("\n");
                                                        if(fichier != NULL)
                                                        fclose(fichier);
                                                        return 0;
                                                    }
                                                    

                                                    Il me reste un Warning mais je ne sait pas pourquoi il est là:
                                                    /home/emmanuel/Programmes en c/wc/main.c||In function ‘main’:|
                                                    /home/emmanuel/Programmes en c/wc/main.c|46|warning: suggest parentheses around ‘&&’ within ‘||’|
                                                    ||=== Build finished: 0 errors, 1 warnings ===|
                                                    </span>
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      3 avril 2010 à 17:00:04

                                                      Pour le warning il faut juste que tu rajoute des parenthèses ici :
                                                      if((c==' ' || c=='\t' || c=='\n' || c=='\r' || c==EOF) && caractere != 0) /* ligne 46*/
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        3 avril 2010 à 23:39:27

                                                        Lithrein, t'as pas repondu... est ce correct d'avoir : 1 ligne, 0 mot, 1 caractere si on entre une chaine vide?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          4 avril 2010 à 0:33:44

                                                          @GurneyH :

                                                          Quel est l'intérêt de cette macro ?
                                                          #define CHECK_FLAG(flags, f)((flags) & (f)) == (f)
                                                          
                                                          if ( CHECK_FLAG ( flgs, COUNT_L ) ) PRINT_S ( nl, ligne );
                                                          

                                                          Il devrait suffire de faire comme ceci :
                                                          if ( flgs&COUNT_L ) PRINT_S ( nl, ligne );
                                                          

                                                          Non ?
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            4 avril 2010 à 6:16:08

                                                            Tout à fait yoch...

                                                            C'était probablement un moyen pour que je me complique la vie!... :-°

                                                            J'édite.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Zeste de Savoir, le site qui en a dans le citron !

                                                            zWc

                                                            × 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