(C++)cin.getline()和cin.get()的区别

cin.getline和cin.get的区别

    • cin.get()
      • cin.get(String,ArSize);
      • cin.get(String,ArSize).get();
    • cin.getline()

cin.get()

cin.get(String,ArSize);

#include
int main()
{
using namespace std;
const int ArSize = 5;
char A[ArSize];
char B[ArSize];

cout << "Enter A:\n";
cin.get(A,ArSize); 
cout << "Enter B:\n";
cin.get(B,ArSize);
cout << A << "\n";
cout <<  B << "\n";
return 0;
}

输入A:
abcdefg
输出:
Enter A:
abcdefg
Enter B:
abcd
efg


输入A:
abc
输出:
Enter A:
abc
Enter B:
abc


在输入A为abcdefg时,由于数组长度只有5,除去末尾需要填充\n,只能读取4个字符,于是 cin.get(A,ArSize); 取走了abcd,剩下的efg\n被cin.get(B,ArSize);读取,也因此,还没等我输入B的值,cin.get(B,ArSize);就已经取着efg\n跑了
————
而在输入A为abc时,同样没等到输入B的值,就直接输出结果了,从输出结果可以看出B的值为\n,那这是因为我输入的是abc\n ,cin.get(A,ArSize);在取走abc后,把\n滞留下来了,导致cin.get(B,ArSize);读取到了\n,于是…cin.get(B,ArSize);啥也没带就直接跑了。

cin.get(String,ArSize).get();

.get()会读取掉一个字符,这就解决了上述cin.get(B,ArSize);啥也没带就直接跑的问题

#include
int main()
{
using namespace std;
const int ArSize = 5;
char A[ArSize];
char B[ArSize];

cout << "Enter A:\n";
cin.get(A,ArSize).get();
cout << "Enter B:\n";
cin.get(B,ArSize);
cout << A << "\n";
cout <<  B << ".\n";
return 0;
}

输入A:
abc
输入B:
efg
Enter A:
abc
Enter B:
efg
abc
efg


输入A后,第一个cin.get(A,ArSize).get();读取,然后紧接着.get()会把\n读取掉。程序执行到cin.get(B,ArSize);我继续输入efg,程序得以按照预期正常执行!

cin.getline()

#include
int main()
{
using namespace std;
const int ArSize = 5;
char A[ArSize];
char B[ArSize];

cout << "Enter A:\n";
cin.getline(A,ArSize);
cout << "Enter B:\n";
cin.getline(B,ArSize);
cout << A << "\n";
cout <<  B << "\n";
return 0;
}

输入:
abcdefg
输出:
Enter A:
abcdefg
Enter B:
abcd


输入A:
abc
输入B:
efg
Enter A:
abc
Enter B:
efg
abc
efg


可以看到在输入abcdefg时,相比cin.get(A,ArSize); efg没掉了

简单点理解就是:
cin.get(); //读取到数值装不下了,就自己加个\n结束
cin.getline(); //读取到\n,然后看数组能装多少就装多少

所以由于cin.getline(); 过于浪费,我们更多的是使用cin.get();


当getline( )读取空行时,下一条输入语句将在前一条getline( )结束读取的位置开始读取;但当get( )(不是getline( ))读取空行后将设置失效位(failbit)。这意味着接下来的输入将被阻断,但可以用cin.clear()命令来恢复输入


输入字符串比分配的空间长:如果输入行包含的字符数比指定的多,则getline( )和get( )将把余下的字符留在输入队列中,而getline( )还会设置失效位,并关闭后面的输入


cin >> string_1;

cin.getline(string_1,20)

cin.get(string_1,20)

cin.get(name,ArSize).get();<=>cin.get(name,ArSize);cin.get();

(cin >> string_1).get(); <=> (cin >> string_1).get(ch);

你可能感兴趣的:(C++,c++,动态规划)