C++1行ずつ文字列入力を読み込む

2452 ワード

C++では、1行を読み込むには3つの方法があります
一.文字配列の場合:メソッド1:getline()は行全体のデータを読み込み、Enterキーで入力した改行記号を使用して入力の終わりを決定します.呼び出し方法:cin.getline(str, len); 1番目のパラメータstrは入力行を格納するための配列名であり、2番目のパラメータlenは読み出す文字数である.
 
 1 #include 
 2 using namespace std;
 3  
 4 int main()
 5 {
 6     char str[30];
 7     cin.getline(str, 30);
 8     cout << str << endl;
 9     return 0;
10 }

方法2:get()
呼び出し方法:cin.get(str, len);
 
 1 #include 
 2 using namespace std;
 3  
 4 int main()
 5 {
 6     char str[30];
 7     cin.get(str, 30);
 8     cout << str << endl;
 9     return 0;
10 }

では、両者の違いは何ですか.どちらも、改行するまで1行の入力を読み込みます.その後、getlineは改行を破棄し、get()は入力シーケンスに改行を保持します.
たとえば、get()を2回連続で呼び出すとします.
cin.get(name, ArSize);
cin.get(dessert, ArSize);
最初の呼び出しの後、改行は入力キューに残りますので、2回目の呼び出しで最初に表示される文字は改行です.したがってget()は、読み取り可能なコンテンツを読み込まずに行末に到達したと考えられる.ヘルプを使用しないと、get()は改行文字を越えられません.
だからcinを使う.get()複数行のデータを入力する場合は、get()を使用して改行を削除できます.
 1 #include 
 2 using namespace std;
 3  
 4 int main()
 5 {
 6     char str1[30], str2[30];
 7     cin.get(str1, 30);
 8     cin.get();//         。
 9     cin.get(str2, 30);
10     cout << "str1: " << str1 << endl;
11     cout << "str2: " << str2 << endl;
12     return 0;
13 }

get(str,len)とget()はcinのクラスメンバーなので、統合して書くことができます.
 
 1 #include 
 2 using namespace std;
 3  
 4 int main()
 5 {
 6     char str1[30], str2[30];
 7     cin.get(str1, 30).get();   //     !
 8     cin.get(str2, 30);
 9     cout << "str1: " << str1 << endl;
10     cout << "str2: " << str2 << endl;
11     return 0;
12 }

 
二.stringクラスメソッド1:getline(cin,str)
これは、ここのgetlineがクラスメソッドではないことを示しています.
ここで注意しなければならないのは、getline(cin,str);前の入力はcin>>ssです.では、strの値が時空になっています.前の行の終端を読み取るからです.
 1 #include 
 2 #include 
 3 using namespace std;
 4  
 5 int main()
 6 {
 7     string str;
 8     getline(cin, str);
 9     cout << str << endl;
10     return 0;
11 }