Мое основное намерение состояло в том, чтобы заставить getchar
возвращаться, как только он получает символ, вместо того, чтобы ждать нажатия клавиши ENTER. я пробовал это
int main()
{
setvbuf(stdin,NULL,_IONBF,0);
getchar();
return 0;
}
Сравнивая это с прототипом setvbuf
setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
он должен установить stdin
в небуферизованный режим.
Но getchar()
продолжает ждать ENTER
Я видел похожие сообщения, подобные этому
Печать при чтении символов в C
которые предлагают альтернативные методы сделать stdin
небуферизованным. Но мне любопытно узнать, почему метод setvbuf
не работает
setvbuf()
перед любым движением в потоке... поэтому первым делом вmain()
. - person pmg   schedule 20.04.2012setvbuf()
. Я пробовал вашу программу сsetvbuf()
и без нее, и поведение было другим. Безsetvbuf()
используются все символы до ENTER включительно (даже если он используется только после ввода ENTER); сsetvbuf()
потребляется только первый символ, остальные символы используются в качестве следующей команды bash. - person pmg   schedule 20.04.2012