• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pliki - pierwsze kroki

0 głosów
444 wizyt
pytanie zadane 26 marca 2020 w C i C++ przez Hubertius Bywalec (2,970 p.)
edycja 26 marca 2020 przez Hubertius

Czołem :)

Mam problem z zadaniem o następującej treści:

Napisz program, który pobierze od użytkownika ścieżkę dostępu do pliku, a następnie wyświetli na ekranie jego zawartość. Plik będzie zapisany w trybie tekstowym.

W przypadku problemów z dostępem do pliku, program powinien wyświetlić komunikat Couldn't open file i zakończyć działanie z kodem błędu 4. Jeżeli uda się odczytać plik i wyświetlić jego zawartość program powinien zwrócić wartość 0. W przypadku, kiedy nie będzie nic do wyświetlenia program powinien poinformować o tym użytkownika komunikatem Nothing to show.

Pamiętaj o tym, żeby zamknąć plik na koniec działania programu.

Przykładowe wejście:

Podaj sciezke do pliku:⏎
text.txt⏎
Przykładowe wyjście (dla pliku text.txt):

To jest przykladowy tekst w pliku.⏎
A to jest druga linia w pliku.
Uwaga

W programie nie wolno używać funkcji alokujacych pamięć.
W programie można zadeklarować tylko jedną tablicę na 30 znaków (do przechowywania nazwy pliku). Deklaracja musi wyglądać następująco: nazwa_zmiennej[31];.
W programie nie wolno używać operatora [].

Mój kod na tym etapie wygląda tak:

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


int main()
{
	printf("Podaj sciezke do pliku\n");
	char nazwa[31];
	scanf("%s",&nazwa);

	FILE *f= fopen(nazwa,"r");
	if(f==NULL)
	{
		printf("Couldn't open file");
		return 4;
	}
	return 0;
}


Co muszę zrobić dalej, by rozwiązać to zadanie? Gdybym mógł zadeklarować kolejną tablicę reszta byłaby już prosta, ale tak nie wiem jak to dalej pociągnąć.  :(

EDIT

Rozbudowałem trochę mój kod:

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


int main()
{
	printf("Podaj sciezke do pliku\n");
	char nazwa[31];
	scanf("%s",nazwa);

	FILE *f= fopen(nazwa,"r");
	if(f==NULL)
	{
		printf("Couldn't open file");
		return 4;
	}
	int liczydlo=0;
	/*
	while(!feof(f))
	{
		fgets(nazwa,100,f);
		puts(nazwa);
	}
	*/
	char c;
	while(1)
     {
        c = fgetc(f);
        if(c==EOF)
        {
            break;
        }  
        else if(c!=10)
        {
            printf("%c", c);
            
            liczydlo=1;
        }
        else
        {
        	printf("\n");
        	liczydlo=1;
		}
     }
	if(liczydlo==0)
	{
		printf("Nothing to show");
	}
	fclose(f);
	return 0;
}

Jednak gdy oddaję zadanie do sprawdzenia wywala mi się na tym przykładowym teście:

Podaj sciezke do pliku⏎
swimfreshfearfewplaceroundmusic.bin⏎
Couldn't open file

Domyślacie się może o co chodzi?  :/

1 odpowiedź

0 głosów
odpowiedź 27 marca 2020 przez j23 Mędrzec (195,220 p.)
Upewnij się, że plik leży w katalogu roboczym aplikacji. Podaj pełną ścieżkę.

Podobne pytania

+1 głos
1 odpowiedź 531 wizyt
pytanie zadane 27 lipca 2022 w Java przez michal441599 Użytkownik (530 p.)
+1 głos
1 odpowiedź 444 wizyt
pytanie zadane 17 lipca 2020 w C i C++ przez ten_tomek Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 706 wizyt

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,295 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...