Zliczanie wierszy w pliku tekstowym

0

Witam, specjalnie tu założyłem konto, bo nie mogę nigdzie znaleźć rozwiązania tego problemu, a zostało mi mało czasu na skończenie projektu.

Muszę napisać funkcję, która zliczy ilość wierszy w pliku, ale nie wiem jak się za to zabrać. Próbowałem zliczanie znaku \n, ale ktoś mi powiedział, że to nic nie da i rzeczywiście tak było, bo jak jest kilka zdań jedno po drugim to program zwróci mi, że jest 1 linijka, kiedy w rzeczywistości ich jest np. 3. Próbowałem jeszcze dzielić ilość znaków w pliku przez 80 (max liczba znaków w 1 wierszu w konsoli), ale jak były znowu znaki typu \n, to wychodziło za mało.

Proszę więc o pomoc i żeby nie było, że nie próbowałem :P

0

Podaj kod, który liczył ci źle te wiersze (według znaków \n) i plik tekstowy, na którym go badałeś.

0

Czy ty przypadkiem nie chcesz policzyć ilości wierszy jakie się pojawią w konsoli po wydrukowaniu w niej zawartości pliku?

0
adf88 napisał(a)

Czy ty przypadkiem nie chcesz policzyć ilości wierszy jakie się pojawią w konsoli po wydrukowaniu w niej zawartości pliku?

No właśnie nie wiem czy mam zliczyć ilość wierszy w konsoli czy w pliku, bo przecież w pliku ich ilość zależy od szerokości okna, której w przypadku konsoli nie da się zmienić. W poleceniu nie mam tego sprecyzowane.

A to fragment kodu:

 void l_lin()
{
FILE *p,*q;
p=fopen("in.txt","r");
q=fopen("out.txt","w");
int i=0;
char znak0;

system("cls");
printf("Uzytkownik wybral opcje zliczania linii w pliku.");

if((znak0=getc(p))!='\0')
{
i=1;
while(!feof(p))
{
znak0=getc(p);
if(znak0=='\n')++i;
}
}
fprintf(q,"Ilosc linii w analizowanym pliku: %d",i);
printf("\nOperacja wykonana pomyslnie.");
}

Plik tekstowy nie ma znaczenia, bo to ma po prostu działać w każdym przypadku (a tak naprawdę to muszę to uodpornić na swojego profesora).

2

Ilość linii w pliku to ilość linii w pliku. Nie ważne gdzie i jak go wyświetlamy. Prawdopodobnie owy "ktoś" wprowadził cię w przysłowiowe maliny. Jeśli w poleceniu nie określono nic więcej to po prostu policz ilość znaków '\n'.

for (;;) {
   znak = getc(p);
   if (feof(p)) break;
   if (znak == '\n') ilosc++;
}
1

Co to robi w tym dziale? :/
Przecież to nie jest C#. ;]

0
adf88 napisał(a)

Ilość linii w pliku to ilość linii w pliku. Nie ważne gdzie i jak go wyświetlamy. Prawdopodobnie owy "ktoś" wprowadził cię w przysłowiowe maliny. Jeśli w poleceniu nie określono nic więcej to po prostu policz ilość znaków '\n'.

for (;;) {
   znak = getc(p);
   if (feof(p)) break;
   if (znak == '\n') ilosc++;
}

Skoro tak, to dzięki za pomoc.

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