「で押すのを避ける方法Enterはgetchar()
?」
まず第一に、端末入力は通常、ラインまたは完全にバッファリングされています。これは、オペレーティングシステムが端末からの実際の入力をバッファに保存することを意味します。通常、このバッファは、fe\n
がでシグナリング/提供されたときにプログラムにフラッシュされstdin
ます。これは、へのプレスによって作られたfeEnterです。
getchar()
チェーンの最後にあります。バッファリングプロセスに実際に影響を与えることはできません。
「どうすればこれができますか?」
他の回答getchar()
でよく説明されているように、特定のシステムコールを使用して端末の動作を明示的に変更したくない場合は、そもそも捨ててください。
残念ながら、標準ライブラリ関数はなく、単一文字入力でバッファをフラッシュするポータブルな方法もありません。ただし、実装ベースの非ポータブルソリューションがあります。
Windows / MS-DOSでは、ヘッダーファイルにgetch()
andgetche()
関数がconio.h
あり、必要なことを正確に実行します。改行がバッファをフラッシュするのを待たずに、1文字を読み取ります。
getch()
との主な違いは、コンソールに実際の入力文字がすぐに出力されないgetche()
ことですが、出力されます。追加はechoの略です。getch()
getche()
"e"
例:
#include <stdio.h>
#include <conio.h>
int main (void)
{
int c;
while ((c = getche()) != EOF)
{
if (c == '\n')
{
break;
}
printf("\n");
}
return 0;
}
Linuxでは、文字の直接処理と出力を取得する方法は、ncurses-libraryのcbreak()
andecho()
オプションとgetch()
andルーチンを使用することです。refresh()
いわゆる標準画面をで初期化し、ルーチンinitscr()
で閉じる必要があることに注意してください。endwin()
例:
#include <stdio.h>
#include <ncurses.h>
int main (void)
{
int c;
cbreak();
echo();
initscr();
while ((c = getch()) != ERR)
{
if (c == '\n')
{
break;
}
printf("\n");
refresh();
}
endwin();
return 0;
}
-lncurses
注:リンカーがncurses-libraryを検索して見つけることができるように、オプションを指定してコンパイラーを呼び出す必要があります。