cin和getline在一个程序中,只有其中一个生效?

时间:2014-01-29 15:53:18

标签: c++ io

以下是代码:

#include <iostream>
#include <stdio.h>

using namespace std;

int main(int argc, char const* argv[])
{
    char s1[23];
    char s2[23];
    // cin >> s1;
    cin.getline(s2, 22);
    cout << s1 << endl;
    cout << s2 << endl;
    return 0;
}

如果我取消注释行cin >> s1,那么将跳过getline函数,不知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:5)

不会跳过,但您必须了解每种输入法如何处理空格。 >>在开始时跳过空格,然后提取直到下一个字符为空格,然后停止。请注意,它会在流中留下空白字符。

getline()提取,直到它提取换行符(并丢弃换行符,而不是存储换行符)。

所以当>>运行时,它会读取字符串。我假设你输入一个单词Enter(产生换行符)。该单词由>>提取,然后在遇到换行符时停止。 换行符保留在流中。

然后getline()运行并提取字符,直到它提取换行符。猜猜是什么,这是它找到的第一个角色 - >>留下的那个角色。