我正在尝试以下代码:
int main()
{
char str1[20];
int a;
cout << "Enter Integer:"
cin >> a;
cout << "Integer:"<<a<<endl;
cout << "Enter string:"<<endl;
cin.getline(str1,20);
cout << "Input String is:"<<str1;
return 0;
}
输出是:
Enter Integer:20
Integer:20
Enter string:
Input String is:
当我不使用 cin 接受整数时,我可以输入字符串,但是当我尝试在 cin 之后使用 cin.getline() 时,它不起作用。
有人可以帮忙吗?
最佳答案
问题是 operator>>
忽略空格(即 ' ', '\t', '\n'
)之前字段,即它一直读取到 before 下一个空格。
getline
读取until and including下一个换行符,并返回换行符之前的文本。
因此,如果您在换行符之前先执行 operator>>
,然后执行 getline
,则 operator>>
将一直读取到之前换行符和 getline 将只读到换行符之后,返回一个空字符串。
注意:输入“20, 20, mystring”后输入缓冲区中的内容有效
20\n20\nmystring
因此
- 第一个
operator>>
读取并返回20
- 第二个
operator>>
读取到第二个20
之后,吞下第一个\n
并返回第二个20
getline
一直读取到第二个\n
并返回之前的文本,即什么都没有。
关于c++ - cin.getline() 函数在 cin 之后无法正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21606922/