Od 29 czerwca uczę się języka C. Wszystko mi gładko szło do teraz. Oto zadanie:
Napisz program, który odczytuje dane wejściowe do momentu napotkania końca pliku i wyświetla każdy znak wraz z jego dziesiętnym kodem ASCII. W jednym wierszu powinno znajdować się dziesięć par znak-kod, ale odczytanie znaku nowej linii powinno pociągać za sobą rozpoczęcie nowego wiersza. Znaki niedrukowane o kodach mniejszych niż kod spacji powinny być traktowane w szczególny sposób. Jeśli znak jest tabulatorem lub znakiem nowej linii, należy wyświetlić odpowiednio \t lub \n. Inne znaki niedrukowane należy przedstawić w postaci znaków sterujących. Na przykład, znak o kodzie 1 to Ctrl-A, co można zapisać jako ^A. Zwróć uwagę, że kod ASCII litery a jest o 64 większy niż kod znaku Ctrl-A. Podobna zależność zachodzi dla innych znaków niedrukowanych.
I mój kod:
#include <stdio.h>
int main(void)
{
int ch, licznik=0;
printf("Cwiczenie 8.2 w jezyku C - autor: xpeye\n\n");
printf("Podaj dane znakowe z EOF na koncu: ");
while ((ch=getchar())!=EOF)
{
licznik++;
if (ch<' ')
{
if (ch=='\t')
printf("\\t-%d ", ch);
else if (ch=='\n')
{
printf("\\n-%d\n", ch);
licznik=0;
}
else
printf("^%c-%d ", ch+64, ch);
}
else
printf("%c-%d ", ch, ch);
if (licznik%10==0)
printf("\n");
}
printf("\nKoniec");
getchar();
getchar();
return 0;
}
Problem mam z while ((ch=getchar())!=EOF) Po wciśnięciu ENTER program nie traktuje go tylko jak zwykłego znaku, ale wysyła do programu zawartość bufora a powinien to zrobić dopiero po ^Z. Gdzie zrobiłem błąd?
Ps.Mam Windows 7 Home Premium