Partage
  • Partager sur Facebook
  • Partager sur Twitter

zWc

    31 mars 2010 à 22:03:25

    Salut,

    Vous pouvez soumettre vos solutions, poser vos questions ou demander des conseils à propos du premier exercice du mois d'avril.

    Bonne Chance.
    • Partager sur Facebook
    • Partager sur Twitter
      31 mars 2010 à 22:43:00

      Citation : Lithrein

      à propos du premier exercice du mois d'avril.



      Déjà mets un lien vers l'énoncé car sinon ton message peut être très énigmatique.
      • Partager sur Facebook
      • Partager sur Twitter
        1 avril 2010 à 14:21:08

        bonjour,
        pour eclaicir ma lanterne je suis pommé avec l'énoncé :

        Citation

        Créez un programme qui récupère sur l'entrée standard (stdin) un flot de caractères tant que la constante EOF


        l'entree standart c'est un fichier ?

        Citation

        récupère le texte à partir d'un fichier passé en argument

        ??
        • Partager sur Facebook
        • Partager sur Twitter
          1 avril 2010 à 14:28:37

          stdin, c'est le clavier.

          Apres, apparement, on te passe un fichier en argument, et tu dois en recuperer le texte.
          • Partager sur Facebook
          • Partager sur Twitter
            1 avril 2010 à 16:14:55

            Citation : Énoncé

            Créez un programme qui récupère sur l'entrée standard (stdin) un flot de caractères tant que la constante EOF.



            Pour récupérer du texte sur l'entrée standard il te suffit d'utiliser la fonction getchar().

            stdin est un pointeur du fichier qui pointe généralement sur clavier (l'entrée standard).
            ...
            typedef struct _IO_FILE FILE;
            ...
            /* Standard streams.  */
            extern struct _IO_FILE *stdin;		/* Standard input stream.  */
            extern struct _IO_FILE *stdout;		/* Standard output stream.  */
            extern struct _IO_FILE *stderr;		/* Standard error output stream.  */
            /* C89/C99 say they're macros.  Make them happy.  */
            #define stdin stdin
            #define stdout stdout
            #define stderr stderr
            ...
            
            • Partager sur Facebook
            • Partager sur Twitter
              1 avril 2010 à 22:28:54

              Citation : SofEvans

              stdin, c'est le clavier.


              C'est l'entrée standard, pas le clavier. ;)

              ./a.out < pouet
              • Partager sur Facebook
              • Partager sur Twitter
                1 avril 2010 à 23:29:02

                Citation : Pouet_forever

                Citation : SofEvans

                stdin, c'est le clavier.


                C'est l'entrée standard, pas le clavier. ;)

                ./a.out < pouet


                Bonne remarque. Et cela montre à quel point l'exercice n'est pas destiné à des débutants s'il doit être écrit correctement.
                • Partager sur Facebook
                • Partager sur Twitter
                  2 avril 2010 à 0:36:26

                  Citation : darkipod

                  l'entree standart c'est un fichier ?


                  Oui.
                  Mais ce n'est pas un fichier sur disque.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    2 avril 2010 à 1:03:08

                    Salut,


                    Je viens de faire l'exercice. Pouvez vous me donner vos commentaire sur mon code ?

                    #include <stdio.h>
                    #include <stdlib.h>
                    #include <string.h>
                    
                    typedef struct Option{
                        int length;
                        int word;
                        int line;
                        char *file;
                    }Option;
                    
                    Option ExtractOption(int argc, char *argv[]);
                    void ParseString(Option opt, int *word, int *line, int *length);
                    
                    int main(int argc, char *argv[])
                    {
                        Option opt = ExtractOption(argc, argv);
                        int word, length, line;
                    
                        ParseString(opt, &word, &line, &length);
                    
                        printf("\t");
                        if(opt.line)
                            printf("%d ligne(s)", line);
                        if(opt.word)
                            printf(" %d mot(s)", word);
                        if(opt.length)
                            printf(" %d caractere(s)", length);
                    
                        return 0;
                    }
                    
                    void ParseString(Option opt, int *word, int *line, int *length){
                        FILE *file = NULL;
                    
                        if(opt.file == NULL){
                            file = stdin;
                        }
                        else{
                            file = fopen(opt.file, "r");
                        }
                    
                        if(file != NULL){
                            char buff[1024];
                            *length = *word = 0;
                            *line = 1;
                    
                            //On lit tout le fichier
                            while(fgets(buff, 1024, file) != NULL){
                                int i = 0;
                                int newWord = 0;
                                (*length)+= strlen(buff);
                    
                                //Pour chaque caractere
                                for(i = 0; i < strlen(buff); i++){
                                    if(buff[i] != ' ' && buff[i] != '\r' && buff[i] != '\n' && buff[i] != '\t' && buff[i] != EOF){
                                        newWord = 1;
                                    }
                                    else{
                                        if(buff[i] == '\n'){
                                            (*line)++;
                                        }
                                        if(newWord == 1){
                                            newWord = 0;
                                            (*word)++;
                                        }
                                    }
                                }
                                if(newWord == 1){
                                    (*word)++;
                                }
                            }
                        }
                        else
                            printf("Erreur : Aucun fichier trouve.");
                    
                    }
                    
                    Option ExtractOption(int argc, char *argv[]){
                        Option opt = {1,1,1, NULL};
                    
                        if(argc > 1){
                            int i = 1;
                            if(argc > 2 || argv[1][0] == '-'){
                                opt.length = 0;
                                opt.line = 0;
                                opt.word = 0;
                            }
                    
                            for(i = 1; i < argc; i++){
                                if(argv[i][0] == '-'){
                                    int j = 1;
                                    for(j = 1; j < strlen(argv[i]); j++){
                                        switch(argv[i][j]){
                                            case 'l':
                                                opt.line = 1;
                                            break;
                    
                                            case 'w':
                                                opt.word = 1;
                                            break;
                    
                                            case 'c':
                                                opt.length = 1;
                                            break;
                    
                                            case 'h':
                                                printf("myWC [-l] [-w] [-c] [FILENAME]\n");
                                            break;
                                            default:
                                                printf("Option inconue\n");
                                            break;
                                        }
                                    }
                                }
                                else{
                                    opt.file = malloc(strlen(argv[i])+1);
                                    if(opt.file != NULL)
                                        strcpy(opt.file, argv[i]);
                                }
                            }
                        }
                    
                        return opt;
                    }
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      2 avril 2010 à 1:15:03

                      T'as un petit décalage de lignes (teste avec un fichier vide)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        2 avril 2010 à 1:17:27

                        Effectivement, mais j'ai du initialiser à 1 sinon il me manque une ligne dans mon comptage :s
                        • Partager sur Facebook
                        • Partager sur Twitter
                          2 avril 2010 à 3:09:42

                          Tu peux faire joujou avec la fonction freopen. :)

                          if(opt.file != NULL)
                          		freopen(opt.file, "r", stdin);
                          if(stdin != NULL){
                          [...]
                          while(fgets(buff, 1024, stdin) != NULL){
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 avril 2010 à 7:15:27

                            Une autre solution pour l'exercice 3.
                            #include <stdio.h>
                            #include <stdlib.h>
                            
                            enum
                            {
                                COUNT_C = 1, COUNT_L = 2, COUNT_W = 4
                            };
                            
                            #define PRINT_S(n, str)(printf("%d %s%s", (n), #str, (n) == 1 ? " " : "s "))
                            
                            void worldCount ( FILE *in_fp, unsigned int flgs )
                            {
                                typedef enum {IN, OUT}State_e;
                                int nc, nw, nl;
                                int c;
                            
                                State_e curState = OUT;
                                nc = nl = nw = 0;
                                while ( ( c = fgetc ( in_fp ) ) != EOF )
                                {
                                    nc++;
                                    nl += c == '\n';
                            
                                    if ( c == ' ' || c == '\t' || c == '\r' || c == '\n' )
                                        curState = OUT;
                                    else if ( curState == OUT )
                                    {
                                        nw++;
                                        curState = IN;
                                    }
                                }
                            
                                if (  flgs & COUNT_L  ) PRINT_S ( nl, ligne );
                                if (  flgs & COUNT_W  ) PRINT_S ( nw, mot );
                                if (  flgs & COUNT_C  ) PRINT_S ( nc, caractere );
                            
                                putchar ( '\n' );
                            }
                            
                            
                            void parseArg ( char const *argv, unsigned int *flgs )
                            {
                                while ( *argv )
                                {
                                    if ( *argv == 'c' ) *flgs |= COUNT_C;
                                    else if ( *argv == 'l' ) *flgs |= COUNT_L;
                                    else if ( *argv == 'w' ) *flgs |= COUNT_W;
                                    else if ( *argv == 'c' ) *flgs |= COUNT_C;
                                    else if ( *argv == 'h' )
                                    {
                                        puts ( "Usage : wc [-l] [-w] [-c] [FICHIER]" );
                                        exit ( EXIT_SUCCESS );
                                    }
                                    else
                                    {
                                        fprintf ( stderr, "Invalid argument %s\n", argv );
                                        exit ( EXIT_FAILURE );
                                    }
                                    argv++;
                                }
                            }
                            
                            
                            int main ( int argc, char *argv[] )
                            {
                                unsigned int flags = COUNT_C | COUNT_L | COUNT_W;
                                FILE *input_fp = stdin;
                            
                                if ( argc > 1 )
                                {
                                    if(argc > 2 || argv[argc - 1][0] == '-')
                                        flags = 0;
                            
                                    while ( argc > 1 )
                                    {
                                        char const *p_argv = argv[--argc];
                                        if ( *p_argv == '-' )
                                            parseArg ( ++p_argv, &flags );
                                        else
                                        {
                                            if ( input_fp == stdin )
                                            {
                                                input_fp = fopen ( p_argv, "r" );
                                                if ( !input_fp )
                                                {
                                                    perror ( "Error " );
                                                    exit ( EXIT_FAILURE );
                                                }
                                            }
                                            else
                                            {
                                                fprintf ( stderr, "Invalid argument %s\n", p_argv );
                                                exit ( EXIT_FAILURE );
                                            }
                                        }
                                    }
                                }
                            
                                worldCount ( input_fp, flags );
                            
                                if ( input_fp != stdin )
                                    fclose ( input_fp );
                            
                                return EXIT_SUCCESS;
                            }
                            

                            Pas trop l'habitude de parser la ligne de commande, moi. :-°
                            edit:WorldCount :honte: Je laisse comme ça... :p.En fait, non, corrigé.
                            edit2: correction du problême signalé par Marc Mongenet.
                            edit3: simplification signalée par yoch.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Zeste de Savoir, le site qui en a dans le citron !
                              2 avril 2010 à 13:07:52

                              Citation : GurneyH

                              Pas trop l'habitude de parser la ligne de commande, moi. :-°



                              Salut,

                              Je trouve qu'il serait intéressant d'utiliser la fonction getopt (cf. <getopt.h>).
                              • parce que ça simplifie le code.
                              • car c'est adapté a ce qu'on veut faire.
                              • pour apprendre a s'en servir.


                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 avril 2010 à 13:18:26

                                Pourquoi ne pas le proposer dans le topic des exercices?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  2 avril 2010 à 13:41:54

                                  Citation : Yoch


                                  Je trouve qu'il serait intéressant d'utiliser la fonction getopt



                                  Je me suis posé la question, après avoir codé mon truc, je n'ai pas vérifié, mais c'est valable sous Windows par exemple?
                                  #include <unistd.h>
                                  

                                  Je crois que tout n'est pas implémenté.
                                  Sinon, effectivement, c'est intéressant.
                                  Un bémol cependant, triturer l'entrée standard à la main est également formateur, non ?.

                                  edit:

                                  Citation : yoch


                                  Je répondais surtout a GurneyH (j'ai édité mon post). Mais la suggestion reste valable pour tout le monde...


                                  Mais ça ne m'a pas fait de mal, même si je ne suis pas satisfait de mon code après coup...
                                  Il y aura surement une autre version. ;)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Zeste de Savoir, le site qui en a dans le citron !
                                    2 avril 2010 à 13:41:55

                                    Je répondais surtout a GurneyH (j'ai édité mon post). Mais la suggestion reste valable pour tout le monde...

                                    @GurneyH : Il existe un support de quelques fonctions <unistd.h> dans MinGW (que pratiquement tout le monde utilise ici). Les fonctions definies dans <getopt.h> font partie des fonctions supportées sous Windows. :)
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      2 avril 2010 à 13:47:34

                                      Citation : Yoch


                                      @GurneyH : Il existe un support de quelques fonctions <unistd.h> dans MinGW (que pratiquement tout le monde utilise ici). <getopt.h> fait partie des fonctions supportées sous Windows. :)


                                      OK, je vais regarder ça, merci. :)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Zeste de Savoir, le site qui en a dans le citron !
                                        2 avril 2010 à 16:05:42

                                        Citation : yoch

                                        Je trouve qu'il serait intéressant d'utiliser la fonction getopt (cf. <getopt.h>).



                                        Ça me fait penser que j'ai justement oublier d'interdire l'utilisation de getopt (c'est aussi une des raisons pour lesquelles on ne récupère que des options avec un caractère), après cela deviens trop simple.

                                        Edit : Je ne peux plus éditer l'énoncé, dommage. Néanmoins je vous recommande de ne pas utiliser getopt pour récupérer les options à un seul caractère, à la rigueur si vous voulez allez plus loin dans l'exercice et récupérer des options longues (--lines par exemple), là ce sera intéressant.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          2 avril 2010 à 17:33:22

                                          J'hésite sur le comportement à adopter face à '\r'. Là je compte comme un retour à la ligne une séquence "\r\n". A part ça, je n'affiche pas de (s) dans le résultat, et je compte autant de fichiers qu'on en passe en paramètre.

                                          #include <stdio.h>
                                          
                                          struct params {
                                          	char **files;
                                          	char opt_l;
                                          	char opt_w;
                                          	char opt_c;
                                          	char opt_h;
                                          	char error;
                                          };
                                          
                                          static struct params params;
                                          
                                          
                                          static void parse_opts(const char *opts)
                                          {
                                          	int i;
                                          	for (i = 0; opts[i]; ++i) {
                                          		switch (opts[i]) {
                                          		case 'l':
                                          			params.opt_l = 1;
                                          			break;
                                          		case 'w':
                                          			params.opt_w = 1;
                                          			break;
                                          		case 'c':
                                          			params.opt_c = 1;
                                          			break;
                                          		case 'h':
                                          			params.opt_h = 1;
                                          			break;
                                          		default:
                                          			params.error = 1;
                                          		}
                                          	}
                                          }
                                          
                                          
                                          static void parse_args(int argc, char **argv)
                                          {
                                          	int has_opts = 0;
                                          	int i;
                                          
                                          	for (i = 1; i < argc && !params.error; ++i) {
                                          		if (argv[i][0] != '-') {
                                          			params.files = &argv[i];
                                          			break;
                                          		}
                                          
                                          		has_opts = 1;
                                          		parse_opts(&argv[i][1]);
                                          	}
                                          
                                          	if (params.error) {
                                          		params.opt_h = 1;
                                          	}
                                          	else if (!has_opts) {
                                          		params.opt_l = 1;
                                          		params.opt_w = 1;
                                          		params.opt_c = 1;
                                          	}
                                          }
                                          
                                          
                                          static void print_wc(size_t lines, size_t words, size_t characters)
                                          {
                                          	if (params.opt_l)
                                          		printf("%zu line%s ",
                                          	               lines, &"s"[lines<2]
                                          		      );
                                          	if (params.opt_w)
                                          		printf("%zu word%s ",
                                          		       words, &"s"[words<2]
                                          		      );
                                          	if (params.opt_c)
                                          		printf("%zu character%s",
                                          		       characters, &"s"[characters<2]
                                          		      );
                                          	printf("\n");
                                          }
                                          
                                          
                                          static void wc(FILE *input)
                                          {
                                          	size_t lines = 0, words = 0, characters = 0;
                                          	int in_word = 0, last_is_cr = 0;
                                          	int c;
                                          	
                                          	while ((c = fgetc(input)) != EOF) {
                                          
                                          		++characters;
                                          
                                          		switch (c) {
                                          		case ' ': case '\t':
                                          			in_word = 0;
                                          			last_is_cr = 0;
                                          			break;
                                          		case '\r':
                                          			++lines;
                                          			in_word = 0;
                                          			last_is_cr = 1;
                                          			break;
                                          		case '\n':
                                          			if (!last_is_cr) ++lines;
                                          			in_word = 0;
                                          			last_is_cr = 0;
                                          			break;
                                          		default:
                                          			if (!in_word) {
                                          				++words;
                                          				in_word = 1;
                                          			}
                                          			last_is_cr = 0;
                                          		}
                                          	}
                                          
                                          	print_wc(lines, words, characters);
                                          }
                                          
                                          
                                          static void usage(FILE *output)
                                          {
                                          	fprintf(output,
                                          	        "Usage: wc [OPTION]... [FILE]...\n"
                                          	        "-l : print lines count\n"
                                          	        "-w : print words count\n"
                                          	        "-c : print characters count\n"
                                          	        "-h : print this help\n"
                                          	       );
                                          }
                                          
                                          
                                          static int wc_files(void)
                                          {
                                          	int i;
                                          		
                                          	for (i = 0; params.files[i]; ++i) {
                                          		FILE *const input =
                                          			fopen(params.files[i], "r");
                                          
                                          		if (!input) {
                                          			fprintf(stderr,
                                          			        "Error, no file found: %s\n",
                                          			        params.files[i]
                                          			       );
                                          			return 1;
                                          		}
                                          		wc(input);
                                          		fclose(input);
                                          	}
                                          
                                          	return 0;
                                          }
                                          
                                          
                                          int main(int argc, char**argv)
                                          {
                                          	parse_args(argc, argv);
                                          	if (params.error) {
                                          		usage(stderr);
                                          		return 1;
                                          	}
                                          	else if (params.opt_h) {
                                          		usage(stdout);
                                          		return 0;
                                          	}
                                          	else if (!params.files) {
                                          		wc(stdin);
                                          		return 0;
                                          	}
                                          	else {
                                          		return wc_files();
                                          	}
                                          }
                                          

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 avril 2010 à 18:40:31

                                            Citation : Marc Mongenet


                                            J'hésite sur le comportement à adopter face à '\r'. Là je compte comme un retour à la ligne une séquence "\r\n".


                                            J'ai eu le même dilemme...
                                            Ce serait surement pas mal de préciser le comportement à adopter.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Zeste de Savoir, le site qui en a dans le citron !
                                              2 avril 2010 à 18:59:06

                                              Je poste un petit code :) :

                                              #include <stdio.h>
                                              #include <stdlib.h>
                                              
                                              typedef struct zOptions
                                              {
                                                  int l;
                                                  int c;
                                                  int w;
                                              } zOptions;
                                              
                                              void zWorldCount(FILE *input, zOptions options)
                                              {
                                                  char c = 0;
                                                  int n_c = 0, n_l = 0, n_w = 0;
                                              
                                                  while ((c = fgetc(input)) != EOF)
                                                  {
                                                      n_c++;
                                                      n_l += c == '\n';
                                                      if (c == ' ' || c == '\n' || c == '\r' || c == '\t')
                                                          n_w++;
                                                  }
                                              
                                                  if (options.l) printf("%d ligne(s) ", n_l);
                                                  if (options.w) printf("%d mot(s) ", n_w);
                                                  if (options.c) printf("%d caractere(s) ", n_c);
                                                  putchar('\n');
                                              }
                                              
                                              void getOption(char *s, zOptions *options)
                                              {
                                                  if (*s++ != '-')
                                                  {
                                                      fprintf(stderr, "Invalid argument %s\n", s);
                                                      exit(EXIT_FAILURE);
                                                  }
                                                  for ( ; *s ; s++)
                                                  {
                                                      switch (*s)
                                                      {
                                                          case 'l':
                                                              options->l = 1;
                                                              break;
                                                          case 'c':
                                                              options->c = 1;
                                                              break;
                                                          case 'w':
                                                              options->w = 1;
                                                              break;
                                                          case 'h':
                                                              puts("Usage : wc [-l] [-w] [-c] [FICHIER]");
                                                              exit(EXIT_SUCCESS);
                                                              break;
                                                          default:
                                                              fprintf(stderr, "Invalid argument %s\n", s);
                                                              exit(EXIT_FAILURE);
                                                      }
                                                  }
                                              }
                                              
                                              int main(int argc, char *argv[])
                                              {
                                                  FILE *input = stdin;
                                                  zOptions options = {1, 1, 1};
                                              
                                                  if (argc > 1)
                                                  {
                                                      int i = 1;
                                                      options.l = 0, options.c = 0, options.w = 0;
                                                      if (argv[i][0] != '-')
                                                      {
                                                          input = fopen(argv[i], "r");
                                                          if (input == NULL)
                                                          {
                                                              perror("Error ");
                                                              exit(EXIT_FAILURE);
                                                          }
                                                          i++;
                                                      }
                                                      for ( ; i < argc ; i++)
                                                          getOption(argv[i], &options);
                                                  }
                                                  zWorldCount(input, options);
                                              
                                                  if (input != stdin)
                                                      fclose(input);
                                              
                                                  return 0;
                                              }
                                              


                                              Pouvez vous me donner des commentaires ? :)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                2 avril 2010 à 19:05:40

                                                Citation : HighTam

                                                Pouvez vous me donner des commentaires ? :)



                                                if (c == ' ' || c == '\n' || c == '\r' || c == '\t')
                                                            n_w++;
                                                

                                                Et si les mots sont séparés par plusieurs espaces? ;)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Zeste de Savoir, le site qui en a dans le citron !
                                                  2 avril 2010 à 19:27:18

                                                  Citation : GurneyH

                                                  Citation : HighTam

                                                  Pouvez vous me donner des commentaires ? :)



                                                  if (c == ' ' || c == '\n' || c == '\r' || c == '\t')
                                                              n_w++;
                                                  


                                                  Et si les mots sont séparés par plusieurs espaces? ;)


                                                  Très bien vu !! Merci :)
                                                  Je corrige !
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    2 avril 2010 à 19:51:38

                                                    Citation : HighTam

                                                    Je poste un petit code :) :
                                                    Pouvez vous me donner des commentaires ? :)


                                                    J'ai essayé en donnant un nom de fichier, mais ça n'affiche rien.
                                                    J'ai essayé sur une entrée standard en tapant "hello" puis EOF, et ça m'a compté 0 ligne, 0 mot, 5 caractères.
                                                    Sur le code source lui-même, ça trouve 815 mots, contre 230 pour la commande wc.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      2 avril 2010 à 19:52:42

                                                      Bon, j'ai regardé vos solutions, et j'aurais quelques remarques à faire :

                                                      @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 terminer, la gestion du '\r' est assez ambiguë puisque le type de retour à la ligne dépend de l'OS (\r\n Windows et \n linux si je ne me trompe pas) donc libre à toi de gérer le retour à la ligne comme bon te semble.

                                                      @GurneyH:
                                                      • Le nom de la fonction est wordCount, non ? Ou tu a fait exprès de marquer world à la place de word.
                                                      • La macro PRINT_S est sympa mais un peu cryptique
                                                      • L'usage des opérateurs bitwise est intéressant


                                                      @dark-lord :
                                                      • Plutôt que tu d'utiliser fgets, je te conseillerais fgetc. (Au lieu de lire "tout" le fichier tu récupère les caractère sun à un.)
                                                      • Plutôt que d'utiliser strcpy pour sauvegarder le fichier, fait pointer opt.file sur l'argument contenant le fichier. @Mar et GurneyH : Un rien plus de commentaires ne seraient pas de refus, surtout pour les débutants qui vont lire vos codes.
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        2 avril 2010 à 19:55:08

                                                        Lithrein t'as un MP concernant cet exo :p
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          2 avril 2010 à 19:55:33

                                                          Citation : GurneyH

                                                          Une autre solution pour l'exercice 3.


                                                          Bizarre, je n'arrive pas à le faire fonctionner (affiche une ligne blanche).
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            2 avril 2010 à 20:07:10

                                                            Ce serait bien de faire l'exercice dans l'ordre, la première partie d'abord et non la dernière question en premier.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            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