
No.2ベストアンサー
- 回答日時:
最初は「そんなことないだろう」と思ってたんですが,確かに入力行の途中でCtrl+Dを押したときは,リターンを押したときのようにそこまでの入力内容がフラッシュされるだけで,EOFにはならないですね.
[a],[b],[c],[Ctrl+D]と押した場合
→ abc97 98 99
私も知らなかったんですが,どうも行頭で押さないとCtrl+DはEOFにならないようです.
キーボードバッファリングの仕様がこうなってるからどうしようも無いと諦めるか,あるいはバッファリングをせずに直で1文字ずつ取るか,どっちかですね.
バッファリングをしないでキーボードから直接文字を取るにはcursesライブラリを使うのが簡単だと思います.
#include <stdio.h>
#include <curses.h>
main()
{
int ch ;
initscr();
while ( ( ch = getch() ) != 4 ){
printf("%d ",ch);
refresh();
}
printf("\n");
endwin();
}
4がCtrl+Dを表す文字コードです.initscr, getch, refresh, endwinがcursesのライブラリ関数です.
コンパイルのときはcursesライブラリをリンクするのを忘れないで下さい.gccの場合↓
gcc test.c -o test -lcurses
この回答へのお礼
お礼日時:2003/05/22 23:58
ありがとうございます!!
Windows環境だとちゃんといくのに、Linuxだと駄目で
非常に悩んでおりました。
cursesライブラリについては全く知らなかったので
色々勉強してみます。
またよろしくお願いします!!!
No.1
- 回答日時:
Ctrl + Dで終了したいのですね。
#include <stdio.h>
main()
{
int ch ;
while ( ( ch = getch() ) != EOF ){
printf("%d\n",ch);
}
}
でいかがでしょうか。
getcharをgetchに変えただけです。
また、putchar('\n');もprintfに組み込んでしまいました。
もしかしたら
#include <conio.h>
を入れないとダメかもしれません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンパイルエラーについて
-
H8マイコンCでprintf/scanfが使...
-
「%n」や「%S」は何故恥ずかし...
-
C言語プログラミング
-
C言語の勉強しています。すみま...
-
C言語で四則演算を使って10を作...
-
ピラミッド表示プログラム。
-
ホームページをC言語で作りたい...
-
最早開始時間と最遅完了時刻を...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
値差の%計算方法について
-
数字以外が入力されたらエラー...
-
「Aに対するBの割合」と「Aに対...
-
VB6.0での小数点の扱いについて
-
【C++】関数ポインタの使い方
-
c languageで 簡単な質問があ...
-
ある商品のロス率を5%見込み、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
Cプログラムについて
-
コマンドラインに出力した文字...
-
WM_CLOSEで閉じれないウィンド...
-
C言語の&に関する質問
-
すごろくに使用するサイコロ
-
文字と数字の判定について
-
printf( " %2d", p * q );
-
【C言語教えてください】sin波...
-
%P と %X の違い
-
C言語の勉強しています。すみま...
-
strcmp
-
c言語でAからZまでを表示する...
-
unsigned int型について
-
(C言語)めちゃくちゃな値にな...
-
printf で二進表示を行いたい。
-
プログラミング C言語 課題でプ...
-
c言語で2000年以降カレンダーを...
おすすめ情報