参考情報追記
(BA後に見つけた情報です)
cinとgetlineの併用
cinを使用した後にgetlineを仕様すると、getlineで取得した文字列には何も入っていないということが発生します。
引用テキストその原因は、cinは改行文字の前で入力が終わっているため、現在位置から改行までを読み込むgetlineを使用すると、空の文字列になってしまうからです。
引用テキスト併用したい場合には、以下のようにします。
C++
1int n; 2std::string s; 3 4std::cin >> n; 5std::cin.ignore(); // 次の改行文字まで最大1文字読み捨てる 6 7std::getline(std::cin, s);
質問
標準入力でcin
の後にgetline
を行うと期待する出力が1行少なくなってしまいます。
正しい方法ではないと思うのですがgetline
を1回余分に行うことで期待する出力は得られました。
getline
を1回余分に行わなくても期待する出力を得る為の方法があれば教えていただきたいです。
実現したいこと
C++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int N; 6 cin >> N; 7 8 for (int i = 0; i < N; i++) { 9 string s; 10 getline(cin, s); 11 cout << s << '\n'; 12 } 13}
input
13 2a b c 3d e f 4x y z 5
output
1//現状の出力 2a b c 3d e f
試したこと
C++
1#include <bits/stdc++.h> 2using namespace std; 3 4int main() { 5 int N; 6 cin >> N; 7 8 //↓この処理をしないと次のforループが1回少ないのは何故? 9 string tmp; 10 getline(cin, tmp); 11 12 for (int i = 0; i < N; i++) { 13 string s; 14 getline(cin, s); 15 cout << s << '\n'; 16 } 17}
output
1//期待する出力 2a b c 3d e f 4x y z
補足情報(FW/ツールのバージョンなど)
Ubuntu 20.04 LTS
WSL2
VSCode 1.73.1
Windows10 19044
C++関連
c++17
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
gdb
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/11/29 14:59
2022/11/29 15:16 編集
2022/11/29 15:22
2022/11/29 15:27
2022/11/29 15:31
2022/11/29 15:48
2022/11/29 16:01
2022/11/29 17:21
2022/11/29 17:33