C ++では、キャリッジリターンにより、cin inputとgetline()の違いが生じます。



C Carriage Return Causes Difference Between Cin Input



質問の1つで、最初にcinを使用して入力し、次にgetline()を使用して入力したため、問題が発生しませんでした。
といった:
画像

#include #include using namespace std string myreverse(string s) int main() { int n cin>>n string str[n] //getchar() for( int i=0i<ni++) { getline(cin,str[i]) str[i] = myreverse(str[i]) } for(int i=0i<ni++) { cout<<str[i]<<endl } return 0 } string myreverse(string s) { char temp for(unsigned int i=0i<s.length()/2i++) { temp = s[i] s[i] = s[s.length()-1-i] s[s.length()-1-i] = temp } return s }

間違った理由:
cin >> n入力するときは、バッファから読み取り、検出されたら読み取りを停止します(タブ/スペース/キャリッジリターン)。このとき、バッファは残っているので(タブ文字/スペース/キャリッジリターン)、次のgetline()を読み込むと、キャリッジリターンが行として読み込まれます。
getline(cin、str [i])getlineはどのように発音しますか?
getlineは、キャリッジリターン文字を含む行を読み取り、cinも読み取ります。 cinがstr [i]に流れ込むと、自動的に「 n」が削除されます。これにより、getline(cin、str [i] in str [i])は文字列の行を取得します。この文字には、キャリッジリターンは含まれません。
解決:
読み取り後のcin >> nで、getchar()を使用してキャリッジリターンを削除します