Цикл почти в порядке, вам нужно больше теста на flag
внутри теста на isalpha(c)
в противном случае вы можете напечатать несколько новых строк, если набор букв не был смежным.
Проблема выравнивания возникаетиз числа символов, выводимых перед табуляцией: "%c : %d \t"
создает один символ для %c
, 3 символа для :
, до 3 символов для %d
и еще один символ для
: это 8 символов дляc >= 100
.Символ TAB расширяется до количества пробелов, необходимого для достижения кратного столбцу числа 8. Следовательно, 1 пробел для c < 100
и 8 пробелов для c >= 100
.
Это можно исправить, удалив лишний пробел перед\t
.
Также обратите внимание, что вы должны прочитать байты из входного потока в переменную int
и проверить на EOF
тоже.
Вот измененная версия:
int main(void) {
int ch;
int flag = 0;
while ((ch = getchar()) != EOF && c != '#') {
if (isalpha(ch)) {
printf("%c : %d\t", ch, ch);
flag++;
if ((flag % 8) == 0)
printf("\n");
}
}
return 0;
}