Hej :)
Rozwiązuję takie oto zadanie:
Napisz program, który pobierze od użytkownika nazwę pliku źródłowego i docelowego a następnie, dla każdej linii z pliku źródłowego ma obliczy sumę liczb w niej zawartych. Uzyskane wyniki mają być zapisane do pliku docelowego, w osobnych liniach. Jeżeli w danej linii nie będzie żadnej liczby, program powinien ją pominąć.
Jeżeli podany przez użytkownika plik nie istnieje to program powinien wyświetlić komunikat Couldn't open file i zwrócić wartość kod błędu 4. W przypadku kiedy nie uda się utworzyć plik wyjściowego komunikat Couldn't create file i zakończyć działanie z kodem błędu 5.
Jeżeli w pliku nie będzie żadnych wartości liczbowych program powinien wyświetlić komunikat File corrupted i zakończyć działanie z kodem błędu 6.
Ostatecznie, jeżeli udało się wykonać wszystkie obliczenia program powinien wyświetlić na ekranie komunikat File saved i zakończyć pracę z kodem błędu 0.
Przykładowa interakcja z programem - sukces (dla pliku wejściowego text.txt, plik wyjściowy out.txt ):
Podaj sciezke do pliku:⏎
text.txt⏎
Podaj sciezke do pliku:⏎
out.txt⏎
File saved
Przykładowa interakcja z programem - błąd wejścia/wyjścia:
Podaj sciezke do pliku:⏎
lie.txt⏎
Couldn't open file⏎
Podaj sciezke do pliku:⏎
reach.txt⏎
Podaj sciezke do pliku:⏎
experience.bin⏎
Couldn't create file⏎
Uwaga
W programie nie wolno używać funkcji alokujacych pamięć.
W programie można zadeklarować tylko tablice na 30 znaków (do przechowywania nazw plików). Deklaracja musi wyglądać następująco: nazwa_zmiennej[31];.
W programie nie wolno używać operatora [].
W plikach mogą się znajdować również inne symbole oprócz liczb, symbole te mają być pominięte w trakcie przetwarzania danych z pliku.
Na tą chwilę rozpisałem swój kod:
#include <stdio.h>
int main()
{
printf("Podaj sciezke do pliku:\n");
char r_file[31];
char w_file[31];
scanf(" %30[^\n]",r_file);
FILE * handle_read =fopen(r_file,"r");
if( handle_read == NULL )
{
printf("Couldn't open file");
return 4;
}
printf("Podaj sciezke do pliku:\n");
scanf(" %30[^\n]",w_file);
FILE * handle_write = fopen(w_file,"w");
if( handle_write == NULL )
{
fclose(handle_read);
printf("Couldn't create file");
return 5;
}
int znak;
int suma = 0;
int i = 0;
while( fscanf(handle_read,"%d",&znak) == 1 )
{
fprintf(handle_write,"%d\n",&suma);
suma = 0;
i++;
}
printf("\n%d\n",i);
if( i == 0 )
{
printf("File corrupted");
return 6;
}
printf("File saved");
return 0;
}
Problem mam przy zliczaniu sumy dla poszczególnego wiersza. Liczby wczytuję za pomocą funkcji fscanf. Jak mogę sprawdzić, czy docieram do znaku końca linii ( '\n' )? Jeżeli już to sprawdzę, będę mógł zapisać sumę z danego wiersza do nowego pliku. Bardzo proszę o pomoc.