Образец программы выглядит следующим образом:
int main(void)
{
char input;
printf("\nEnter phone number: ");
while ((input = getchar()) != '\n') {
switch (toupper(input)) {
case 'A': case 'B': case 'C':
printf("2");
break;
case 'D': case 'E': case 'F':
printf("3");
break;
case 'G': case 'H': case 'I':
printf("4");
break;
case 'J': case 'K': case 'L':
printf("5");
break;
case 'M': case 'N': case 'O':
printf("6");
break;
case 'P': case 'R': case 'S':
printf("7");
break;
case 'T': case 'U': case 'V':
printf("8");
break;
case 'W': case 'X': case 'Y':
printf("9");
break;
default:
putchar(input);
}
}
printf("\n\n");
return 0;
}
Мой вопрос в том, как здесь работает поток? Я не могу понять путь, по которому пошла программа. Станет ли переменная char
волшебным образом массивом? Как получается, что putchar()
печатает всю строку вместо первого введенного символа? Как именно то, что должно получать и печатать один символ, считывает и печатает целую строку символов, изменяя их с помощью оператора switch? Проверяет ли он каждый введенный char
? Но тогда как строка печатается как строка?
Редактировать: я провел некоторое исследование и прочитал о буфере клавиатуры, который, кажется, является причиной моего замешательства. Насколько мне известно, getchar()
и putchar()
получают и выводят один символ. Я знаю, что цикл постоянно запрашивает следующий «буферизованный» символ, когда возвращается getchar()
, все еще немного сбит с толку тем, что я должен его получить, но что еще больше сбивает с толку, так это putchar()
. В конце цикла, когда он прерывается и переходит к условию, печатает ли он этот один символ, затем продолжает и печатает другой один за другим при каждом выполнении цикла? Только останавливать цикл, в какой момент была прочитана новая строка? И если да, то на экране отображается только то, что было напечатано ранее? И тогда, если это так, то напечатанные символы будут печататься в строке рядом друг с другом при каждом выполнении, создавая иллюзию строки? Мне нужно подтверждение этого, а также, когда char
выбрасывается и заменяется? После его печати? И в какой строке он получает next
char в очереди буфера?
while ((input = getchar()) != '\n')
считывает каждый символ по одному, пока он не будет равен чему?'\n'
(где это находится?) - person David C. Rankin   schedule 25.04.2016