Jak wypisac plik --> wywolanie z zalaczonej funkcji.

0

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

    char c;
    char *plik;
    FILE *file;

void openFile(FILE *file, char *plik);

int main(){

    plik = (char *) malloc (15 * sizeof(char));

    openFile(file, plik);

    while ( (c = fgetc(file)) != EOF) { 
        putchar(c);
       // letters++;
    }
 }

void openFile(FILE *file, char *plik) {

do {
        printf("Podaj poprawna nazwe pliku\n");
        scanf("%s", plik);
        file = fopen (plik, "r");
        if (file == NULL) {
            printf("Nie udalo sie otworzyc pliku.\n");
        } else {
            printf("\n\nZnaleziono plik:-)\n\n");
        }
    } while(file == NULL);
}  //ta funkcja dziala bardzo dobrze, sprawdza czy nazwa jest poprawna i otwiera wskazany plik

O co chodzi?

Wywoluje funkcje, w ktorej chce:

  • zapytac o nazwe pliku,
  • zapisac ja w tablicy,
  • otworzyc go!

Nastepnie juz w ciele funkcji main() chce wypisac plik, ktory dopiero otworzylem za pomoca funkcji openFile(). Niestety tu jest blad i sie nie wypisujefoo. Dlaczego? Skoro funkcja openFile zwrocila komunikat, ze plik otworzono, ale on tak jakby nie jest dostepny poza funkcja wywolana... Podejrzewam, ze mam jakis problem ze wskaznikami i nie wiem jaki:-( pomozcie,. Ucze sie programowanie w C i nie wiem jak z tego wybrnac...

P.S wiem, ze da sie to zrobic bez zalaczania funkcji (i to dziala) ale chcialbym sie nauczyc wlasnie tych wskaznikow, na takim przykladzie.

Z gory dziekuje za pomoc.

0

Do funkcji openFile przekazujesz wskaźnik do zmiennej file, następnie zmieniasz ten wskaźnik(zmieniasz wskaźnik, a nie wartość tego na co on wskazuje).

Aby to działało poprawnie musisz zastosować podwójny wskaźnik

0
#include <stdio.h>

FILE *openFile()
  {
   char plik[16];
   FILE *file=NULL; 
   for(;;)
     {
      printf("Podaj poprawna nazwe pliku: ");
      scanf("%15s",plik);
      file=fopen(plik,"r");
      if(file) return file;
      printf("Nie udalo sie otworzyc pliku.\n");
     }
  }

int main()
  {
   FILE *file;
   int c;
   file=openFile(); 
   while((c=fgetc(file))!=EOF)
     { 
      putchar(c);
     }
   return 0;
  }
0

Czy moge Cie poprosic o zastosowanie tego podwojnego wskaznika w kodzie i poprawienie go? Dzieki za odp...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0