在流的开头用空行上的scanf了解getline()的行为

时间:2014-06-16 13:34:22

标签: c++ input scanf getline

我正在阅读STDIN中的以下内容

2

hello world

bye world

使用以下代码:

scanf("%d", &n);
while(getline(cin, str))
    cout << "*" << str << endl;

这是输出:

*
*
*hello world
*
*bye world

当我使用scanf("%d\n", &n)完全修改要在第一行读取的代码时,getline会忽略第一个空行:

*hello world
*
*bye world

我的问题是为什么getline忽略了第一个空行?

1 个答案:

答案 0 :(得分:4)

  

我的问题是为什么getline忽略了第一个空行?

它不是; scanf正在跳过它。格式字符串中任何数量的连续空格(例如\n)都会导致它跳过输入中任意数量的连续空格(例如两个换行符)。