質問概要
Q: ctrl+D を押したあと、std::cin.getline()
で標準入力を受け取り続けることはできますか?
C++ でcatコマンド(オプションなし)を作ろうとしています。その過程で行き詰まり質問しています。
質問詳細
cat コマンドを作成するにあたって、再現できない挙動があります。
それは、cat コマンドで標準入力待ち状態で、<文字>+Ctrl D 押したときのものです。
再現手順を以下に示します。
zsh
1$ cat 2 <- 標準入力まち 3 ddd<space> <-ここで ctrl+ D を押下すると 'ddd ddd' と表示される。このあとも入力を続けることが可能。 4
上記の挙動を再現したいのですが、Ctrl + D が押された瞬間にプログラムの標準入力にEOF が送られてしまい、追加で入力ができません。
以下に、自分が書いているコードを記載します。
C++
1#include <iostream> 2 3int main() 4{ 5 char input[20]; //簡単のため、大きさ20にしている。 6 while(1) 7 { 8 std::cin.getline(input, 20);//標準入力取得 9 if (std::cin.eof()) // Ctrl + D が押されたらこの中に入る。 10 { 11 std::cout << input; 12 } 13 else 14 { 15 std::cout << input << std::endl;//通常の入力であればこっち 16 } 17 std::cin.clear(); 18 } 19}
このプログラムの挙動をいかに示します(実行ファイル名はa.out
)
zsh
1 2$ ./a.out 3<- 標準入力まち 4ddd <- enter押下 5ddd 6 7ddd <-ctrl Dを2回押下すると、 'ddd ddd' となるが、これ以降入力を受け付けなくなる。
自分が所望する挙動は、cat コマンドの様に、Ctrl + D を押したあとでも、押す前と変わらず入力ができることです。
どなたかお力を貸してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。