Znalazłem taki program. Jest on dla mnie jasny, oprócz fragmentu w funkcji main dla ostatniego else if. Mianowicie, co się dzieje gdy wpiszę np 30 znaków? Dlaczego program wypisuje ten "połamany" wiersz dopiero po naciśnięciu klawisza enter? Skoro tablica line mieści maksymalnie 10 znaków to gdzie zapisuje się reszta?
#include<stdio.h>
#define maxcol 10
const int tabinc = 8;
char line[maxcol];
int zamtab(int pos);
int znsp(int pos);
int nowapoz(int pos);
void wypisz(int pos);
int main() {
int c, pos;
pos = 0;
while((c = getchar()) != EOF) {
line[pos] = c;
if(c == '\t')
pos = zamtab(pos);
else if(c == '\n') {
wypisz(pos);
pos = 0;
} else if(++pos > maxcol) {
pos = znsp(pos);
wypisz(pos);
pos = nowapoz(pos);
}
}
return 0;
}
void wypisz(int pos) {
int i;
for(i = 0; i < pos; i++)
putchar(line[i]);
if(pos > 0)
putchar('\n');
}
int zamtab(int pos) {
line[pos] = ' ';
for(pos++; pos < maxcol && pos % tabinc != 0; pos++)
line[pos] = ' ';
if(pos < maxcol)
return pos;
else {
wypisz(pos);
return 0;
}
}
int znsp(int pos) {
while(pos > 0 && line[pos] != ' ')
pos--;
if(pos == 0)
return maxcol;
else
return pos + 1;
}
int nowapoz(int pos) {
int i,j;
if(pos <= 0 || pos >= maxcol)
return 0;
else {
i = 0;
for(j = pos; j < maxcol; j++) {
line[i] = line[j];
i++;
}
return i;
}
}