Prosty program czytający wiersze

0

Witam,

Chodzi mi o napisanie programu który czyta 3 ostatnie wiersze z konsoli i wypisuje je. Jeżeli jest mniej to wyświetla tyle wierszy ile jest. Natomiast jeśli 3 ostatnie wiersze w sumie maja ponad 30000 znaków, wywala komunikat i kończy.

Niby prosty program, a ja już siedzę nad nim trzeci dzień. W C++ pewnie zrobiłbym to na stringach i zapisanie w tablicy, ale w C, to jest ciężko, mógłby ktoś pomóc?

Wyrazy dozgonej wdzięczności i ogromne podziękowania ;)

0

Ja bym to zrobil mniej wiecej tak

char c;
char t[3][30000];
int i=0,j=0;
while((c=getchar())!=EOF) {
   if(i%3) i=0;
   if(c=='\n') {tab[i++][j++]=c; j=0}
   else {
      tab[i][j++]=c;
   }
}

Dodaj jeszcze liczenie, czy trzy wiersze nie przekraczaja limitu. Kodu nie sprawdzalem, ma tylko pokazac mniej wiecej idee.
Z tym, ze przy wypisywaniu mozesz miec taka sytuacje, ze np ostatni wiersz bedzie mial index i=1; Wtedy musisz wypisac to w kolejnosc 1,2,0;
Np tak

for(k=0;k<3;k++,i++) {
if (i%3) i=0;
printf("%s",tab[i]);
}
0

Ogromne dzięki Bad_Drone, kod po kilku drobnych zmianach kompiluje się i działa prawie poprawnie, gdyż wyświetla na wyjściu 3 razy ten sam tekst (ostatni wiersz x3), jakby można to było dopracować?

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

int main()
{
    char c;
    char tab[3][30000];
    int i=0,j=0,k=0;
    while((c=getchar())!=EOF)
    {
        if(i%3) i=0;
        if(c=='\n')
        {
            tab[i++][j++]=c;
            j=0;
          }
          else
        {
            tab[i][j++]=c;
        }
    }

    for(k=0; k<3; k++,i++)
    {
        if (i%3) i=0;
        printf("%s",tab[i]);
    }
}
0

Bedac na powietrzu przypomnialo mi sie, ze nie powinno byc

 i%3

a if(!i%3)

0
Bad_Drone napisał(a):

Bedac na powietrzu przypomnialo mi sie, ze nie powinno byc

 i%3

a if(!i%3)



Po zamianie ponownie się powtarza się 3 razy ten sam wiersz, tylko teraz zamiast ostatniego wersa, to pierwszy wers :(

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