2013-04-25 4 views
1

Итак, я получаю некоторые странные результаты, используя getchar в Visual Studio 2012 Ultimate. Это самый простой пример, который я мог бы придумать, чтобы показать, что это не ошибка кода и что-то еще в действии.getchar() не действует так, как должно быть?

#include <cstdio> 

int main(int argc, char* argv[]) { 
    char c = getchar(); 
    putchar(c); 
    return 0; 
} 

Однако результат выходит (визуально) действует немного как «КИН» в библиотеке iostream. getchar возвращает один символ, как он должен (первый), но когда я нажимаю клавиши, он отображает символы на экране и не возвращается до тех пор, пока я не нажму кнопку enter. Я немного искал и не могу найти никаких других случаев этого, кто-нибудь знает, что здесь происходит?

ответ

1

Стандартный ввод обычно буферизирован. Это означает, что система будет считывать и хранить символы при вводе их во входном буфере, пока вы не введете полную строку текста. Функция getchar() считывает символы из этого входного буфера.

Для большинства целей имеет смысл читать ваш ввод полной строки за раз, а затем обрабатывать линию, как только вы ее прочитали.

Есть способы получить немедленный ввод по одному символу за раз, но они являются системными (и немного уродливыми). Вопрос 19.1 в comp.lang.c FAQ обсуждает это.

+0

Это довольно хорошо отвечает на него. Благодарю. –

1

Ввод буферизируется по строке, поэтому getchar будет принимать символ только один раз, когда вводится строка ввода. Если вы не закончите линию, а закроете вход ^D на Linux, я думаю, ^Z на Windows, то вы увидите, что он также напечатает первый символ.

Смежные вопросы