Pobranie nazwy pliku

0

Witam, mam problem z funkcją odczyt w tym programie:

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


#define SWG 3
#define MAXN 20
#define MAXI 20
#define MAXO 100

struct student {
	char nazwisko[MAXN];
	char imie[MAXI];
	unsigned short int wiek;
	unsigned short int  oceny_proc[MAXO];
};

void zapis (struct student *gr) {
     int n;
     FILE *plik=fopen("student.txt", "a+");
     for (n=0; n<SWG; n++) {
     fprintf (plik,"%s %s \n", gr[n].nazwisko, gr[n].imie); 
     }
         }

void odczyt (struct student *gr) {
     char nazwa[20];
     FILE *plik;
     printf("Podaj nazwe pliku: ");
     gets(nazwa);
     while(getchar()!='\n') {}
     printf(nazwa);
     plik=fopen(nazwa, "a+");
     if ((plik)==NULL) {printf("Plik nie istnieje\n");}
     }

void czytaj(struct student *gr){
	int i;
	for (i=0; i<SWG; i++){
		printf("podaj nazwisko studenta %i\n", i+1);
		gets(gr[i].nazwisko);
		printf("podaj imie studenta %i\n", i+1);
		gets(gr[i].imie);
	}
}

void wypisz(struct student *gr){
    int i;
	for (i=0; i<SWG; i++){
		printf("nazwisko studenta %i to %s\n", i, gr[i].nazwisko);
		printf("imie studenta %i to %s\n", i, gr[i].imie);
	}
}

int main()
{

    int f, q;
	struct student grupa[SWG];
	///////////////////MENU
printf("Chcesz stworzyc nowy plik czy otworzyc istniejacy ? (1-nowy, 2-nadpisywanie)");
	scanf("%d", &q);
	if (q==1){
	while (f!=10){
          printf("'1' - wpisywanie studentow\n'2' - zapis\n");
	      scanf("%d", &f);
	      while(getchar()!='\n') {}
	      switch(f){
                    case 1: czytaj(grupa); break;
                    case 2: {
                         zapis(grupa); printf("Dane zapisano\n"); break;}
                    }
                    }
                    }
    if (q==2){
              odczyt(grupa);
              while (f!=10){
          printf("'1' - wpisywanie studentow\n'2' - zapis\n");
	      scanf("%d", &f);
	      while(getchar()!='\n') {}
	      switch(f){
                    case 1: czytaj(grupa); break;
                    case 2: {
                         zapis(grupa); printf("Dane zapisano\n"); break;}
                    }
                    }
                    }
                    
          system("pause");
	return 0;

} 

Cały czas wyświetla mi się, że plik nie istnieje, będę wdzięczny za pomoc

0
void odczyt (struct student *gr) {
     char nazwa[20];
     FILE *plik;
     printf("Podaj nazwe pliku: ");
     gets(nazwa);
     //while(getchar()!='\n') {} //po co to?
     printf(nazwa);
     plik=fopen(nazwa, "a+");
     if ((plik)==NULL) {printf("Plik nie istnieje\n");}
     }

Może nie mieści ci się ścieżka w 20 znakach?

0

Nie hula, wywala błąd "32 cannot convert char (*)[20]' to const char*' for argument 1' to FILE* fopen(const char*, const char*)' " a to "while" było po to że bez tego w ogóle nie dało się wpisać nazwy pliku. Ścieżka się mieści w 20 znakach.

0

To może zamiast tego getsa i getchara daj scanf("%s", nazwa);

0

Wszystko git, ale teraz cały czas jest jakby taki plik istniał tzn byle jaką nazwę wpiszę nigdy nie wyświetli "plik nie istnieje".

1

"The file is created if it does not exist." http://www.cplusplus.com/reference/clibrary/cstdio/fopen/

0

Więc jak w takim razie sprawdzić czy plik istnieje czy nie przy jednoczesnym otwieraniu jeśli istnieje ?

1
bool fileExist(char * name)
{
   FILE *fp = fopen(name, "r");
   if( fp )
   {
      fclose(fp);
      return true;
   } else return false;
}

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