cin.getline()函数在cin之后无法正常工作?

时间:2014-02-06 15:23:38

标签: c++ string cin

我正在尝试以下代码:

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;
}

和OUTPUT是:

Enter Integer:20
Integer:20
Enter string:
Input String is:

我可以在不使用cin接受整数时输入字符串,但是当我尝试在cin之后使用cin.getline()时,它无效。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

问题在于operator>>在字段之前忽略空格(即' ', '\t', '\n',即它会在之前读取下一个空格。< / p> 另一方面,

getline读取直到并包含下一个换行符,并返回之前的文本。

因此,如果您在换行符之前先执行operator>>,然后getline,则operator>>将在换行符之前读取,并且getline将只读取到换行符,返回一个空字符串。

注意:输入“20,20,mystring”后输入缓冲区中的内容实际上是

20\n20\nmystring

因此

  • 第一个operator>>读取并返回20
  • 第二个operator>>读取到第二个20之后,吞下第一个\n并返回第二个20
  • getline读取到第二个\n并返回之前的文本,即没有。

答案 1 :(得分:0)

试用函数 gets(),我更喜欢它接受字符串,而你需要传递的唯一参数是字符串名称。