FILE

Sekcia: Programovanie 22.10.2011 | 00:55
Avatar Zer0 Slackware 13.37  Používateľ
Zdar


Mam problem ak pouzijem FILE *a,*b; a=fopen("a","w"); b=fopen("a","r") v int main tak a a b nemozem pouzit vo vlastnych funkciach ako na to ??? :D Inac povedane vo vlastnej funkcii mi neide fprintf(a,"aaaaa");
    • Re: FILE 22.10.2011 | 01:10
      Avatar Fridolín Pokorný Fedora 21  Používateľ
      $ cat test.c 
      #include <stdio.h>
      #include <stdlib.h>
      
      int main(void) {
          FILE *a, *b;
          int c;
      
          a = fopen("a", "w");
          if (! a) {
              perror("a");
              return EXIT_FAILURE;
          }
      
          b = fopen("b", "r");
          if (! b) {
              perror("b");
              fclose(a);
              return EXIT_FAILURE;
          }
      
          fprintf(a, "Hello, file!\n");
          fclose(a);
      
          while((c = fgetc(b)) != EOF)
              putchar(c);
      
          fclose(b);
      
          return EXIT_SUCCESS;
      }
      
      $ cat a
      cat: a: No such file or directory
      $ cat b
      Ahoj!
      $ gcc test.c
      $ ./a.out 
      Ahoj!
      $ cat a
      Hello, file!
      $ cat b
      Ahoj!
      

      Skus tvoj problem demonstrovat na kratkom programe.
    • Re: FILE 22.10.2011 | 01:19
      johnny   Návštevník
      Ak som ťa správne pochopil, tak tvoj kód vypadá asi takto:
      void funkcia()
      {
         ...
          fprintf(a,"aaaaa");
         ...
      }
      
      main()
      {
        ...
        FILE *a,*b;
        a=fopen("a","w");
        b=fopen("a","r");
        ...
        funkcia();   //volanie funkcie
        ...
      }
      

      a nejde ti to skompilovať.
      To je preto lebo premenné "a" a "b" funkcia() nepozná. Tieto premenné musia byť deklarované ešte pred definíciou funkcie(), alebo posielané funkcii() ako parametre.

      takže máš napríklad tieto dve riešenia:
      void funkcia();
      FILE *a,*b;
      
      main()
      {
        ...
        
        a=fopen("a","w");
        b=fopen("a","r");
        ...
        funkcia();   //volanie funkcie
        ...
      }
      
      void funkcia()
      {
         ...
          fprintf(a,"aaaaa");
         ...
      }
      
      
      alebo
      void funkcia(FILE *parameter);
      
      main()
      {
        ...
        FILE *a,*b;
        a=fopen("a","w");
        b=fopen("a","r");
        ...
        funkcia(a);   //volanie funkcie
        ...
      }
      
      void funkcia(FILE *parameter)
      {
         ...
          fprintf(parameter,"aaaaa");
         ...
      }
      
      
    • Re: FILE 22.10.2011 | 03:16
      Avatar borg Fedora  Administrátor
      tomu sa vravi obor platnosti premennej (variable scope).