「で押すのを避ける方法Enterはgetchar()
?」
まず第一に、端子入力は通常、ラインまたは完全にバッファリングされています。これは、オペレーティングシステムが端末からの実際の入力をバッファに保存することを意味します。通常、このバッファは、fe\n
がで通知/提供されたときにプログラムにフラッシュされstdin
ます。これはプレスによって作られたfeEnterです。
getchar()
チェーンの終わりにあります。実際にバッファリングプロセスに影響を与えることはできません。
「どうすればこれができますか?」
溝 getchar()
最初の場所で、他の回答で説明したように明示的に端末の動作を変更するために、特定のシステムコールを使用したい場合はドント。
残念ながら、標準のライブラリ関数はなく、1文字の入力でバッファをフラッシュするポータブルな方法はありません。ただし、実装ベースの非ポータブルソリューションがあります。
Windows / MS-DOSには、getch()
とがありますgetche()
機能があります。conio.h
ヘッダーファイルに、必要なことを正確に実行します。改行がバッファをフラッシュするのを待たずに、1文字を読み取ります。
主な違いgetch()
とはgetche()
つまり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では、直接文字処理および出力を得るための方法は、使用することですcbreak()
し、echo()
オプションとgetch()
し、refresh()
は、ncurses-libraryルーチンです。
と呼ばれる標準画面をで初期化し、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を検索して見つけることができるように、オプションを指定してコンパイラーを呼び出す必要があります。