C++:cinとgetlineの文字列入力時の違い
1693 ワード
C++:cinとgetlineの文字列入力時の違い
cin >> your_string std::cin>>your_を通過stringで文字列を入力する場合、入力した文字列の先頭がスペース、タブ、およびリターンの場合、これらの記号は無視され、後続の文字から入力が開始されます. 入力文字列にスペースとタブが含まれている場合、これらの文字は入力終了条件として標準入力ストリームを早期に終了させる.
getline(cin, your_string) std::getlineメソッドはstd::cin入力文字列と比較して、先頭のスペース記号、タブ記号、およびリターン記号を受信し、入力文字列のスペース記号とタブ記号も受信します.
文字バッファの違い入力文字列にスペースとタブが含まれていない場合はstd::cin>>your_を使用します.string方式文字列を入力すると、文字バッファに戻り文字が残ります.次回std::cin>>your_を使用すると、string文字列を入力すると、バッファに残っているリターンが入力に影響しないことがわかります.これは、文字列の先頭のリターンが無視されるためです.ただし、getlineはリターン記号を終了フラグとしているため、std::cinが文字列を入力してgetlineを使用して次の文字列を入力すると問題が発生します. なので、実際に文字列を入力する場合は、入力した文字列にスペースが含まれているかどうかにかかわらずgetline方式で文字列を入力することをお勧めします.
cin >> your_string
std::string your_string = "";
std::cin >> your_string; // " Hello"
std::cout << your_string << std::endl;;
Hello
std::string your_string = "";
std::cin >> your_string; // "Hello World"
std::cout << your_string << std::endl;;
Hello
getline(cin, your_string)
std::string your_string = "";
std::getline(std::cin, your_string); // "Hello World"
std::cout << your_string << std::endl;
Hello World
文字バッファの違い
std::string str1 = "", str2 = "";
std::cin >> str1; // "Hello"
std::getline(std::cin , str2); // "World", 。
std::cout << str1; // str1 == "Hello"
std::cout << str2; // str2 == ""
std::cout << std::endl;
std::cout << str2.empty(); // str2
Hello
1