Witam mam prośbę odnośnie oceny programu do zadania 1.18 z książki "Język ANSI C"
Generalnie chodzi mi o to czy program jest przejrzysty, zrozumiały, poprawny i czy jest to dobry styl programowania i poprawne myślenie algorytmiczne.
Cała idea opiera się na tym, że wczytujemy znaki do tablicy do momentu znaku nowego wiersza lub przepełnienia tablicy
Jeśli nastąpi któreś z tych zdarzeń, to sprawdzamy czy wczytywaliśmy białe znaki jeśli tak, to opuszczamy je i znak końca tablicy umieszczamy za ostatnim poprawnym znakiem.
poniżej kod źródłowy funkcji getline, która realizuje to zadanie.
int getline(char line[],int mx)
{
int i,c,lbznakow;
int stan;
lbznakow = 0;
stan = OUT;
for(i=0;i<mx-1&&(c=getchar())!=EOF&&c!='\n';i++)
{
if(c!=' ' && c!='\t')
{
lbznakow = 0;
stan = IN;
}
if(c==' '||c=='\t')
{
lbznakow++;
stan = OUT;
}
line[i]=c;
}
if(i==mx-1)
{
fflush(stdin);
if(stan==OUT)
{
if(i==lbznakow)
{
line[i-lbznakow]=c;
i = i-lbznakow;
i++;
}
else
{
line[i-lbznakow]=c;
i=i-lbznakow;
}
}
}
if(c=='\n')
{
if(stan==OUT)
{
line[i-lbznakow]=c;
i=i-lbznakow;
}
if(stan == IN)
{
line[i] = c;
}
i++;
}
line[i]='\0';
return i;
}
Test czy wiersz jest pusty(biały) czy nie zrealizowane jest w funkcji głównej programu. Kod źródłowy poniżej
while((len=getline(wiersz,MAXLINE))>0)
{
if(len==1&&(wiersz[len-1]=='\n'||wiersz[len-1]=='\t'||wiersz[len-1]==' '))
printf("Wiersz pusty\n");
else
printf("%s",wiersz);
}