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

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

输出是:

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/

相关文章:

c++ - 比较字符串元素与字符串

c++ - SFML 不播放任何声音,但没有错误

c++ - 函数返回 -1 和 ~0 之间有很大区别吗?

c++ - 有没有办法避免以下代码中的内存泄漏?

c++ - cin 是否在输入流中采用空字符?

c++ - 关于C++中cin的一个问题

c++ - 是或否程序,用于请求对应用程序进行评级的权限

c++ - 防止模板化成员函数中某些参数的隐式转换

java - 如何替换字符串中的单词?

string - 混合(字符和数字)变量的逻辑查询