[解決済み] C言語でユーザー入力を待つ?
2022-01-28 08:10:25
質問
ユーザーの入力に対して一時停止する簡単なコマンドを作ろうとしています。Bashスクリプトで使えると思います。
以下は私のコードです。
#include <stdio.h>
int main() {
char key[1];
puts("Press any key to continue...");
fgets(key,1,stdin);
}
ユーザーの入力に対して一時停止もしない。
先ほど、getch() (ncurses)を使ってみました。何が起こったかというと、画面が真っ白になり、キーを押すと、元々画面にあったものに戻り、そして、見たのです。
$ ./pause
Press any key to continue...
$
なんとなく思い通りになりました。しかし、私が欲しいのは
pause
コマンドをDOS/Windows(私はLinuxを使用しています)で使用することができます。
解決方法は?
GNU Cライブラリマニュアルより。
関数: char * fgets (char *s, int count, FILE *stream)
fgets 関数は、ストリームから文字を読み込みます。 を追加して文字列sに格納します。 文字が文字列の終わりを示します。文字数 文字分のスペースをsに入れる。 が、読み込まれる文字数は 最大でカウント-1 . 余分な文字スペースは、NULL 値を保持するために使用されます。 文字列の末尾にある
だから
fgets(key,1,stdin);
は 0 文字を読み取って返します。(読み方:ただちに)
使用方法
getchar
または
getline
の代わりに
編集:fgetsも一度も返しません。
count
文字がストリーム上で利用可能になると、改行を待ち続け、その後に
count
という文字が表示されるので、この場合、"any key"は正しい表現ではないかもしれません。
これを使うことができます 例 を使用すると、ラインバッファリングを回避することができます。
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
int mygetch ( void )
{
int ch;
struct termios oldt, newt;
tcgetattr ( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr ( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr ( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main()
{
printf("Press any key to continue.\n");
mygetch();
printf("Bye.\n");
}
関連
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】MPI通信でMPI_Bcastを使用する場合
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] フォルダとそのサブフォルダ/ファイルのパーミッションを一括で変更する方法
-
[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み】strcmpが機能しない
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み] テスト
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み] C言語でのプログラム完了時の画面一時停止
-
[解決済み】LinuxのDOSポーズに相当するものは何ですか?