为什么cin.get()函数会删除' \ n'在一个字符串?

时间:2015-03-04 12:26:25

标签: c++

根据我老师的课程,cin.get()和cin.getline()之间的区别在于,当你要求他们在遇到你设置的特殊角色时停止抓取,前者会在角色前面停止,而后者会在角色后面停下来。(我知道两者的默认角色是' \ n',这意味着返回。)

但是为什么cin.get()函数会删除' \ n'在一个字符串?

我的代码如下:

int main()
{
       char a[10][10];
       int n=0;
       cin>>n;

      for (int i=0; i<n;i++)
        cin.getline(a[i],10);
      for (int i=0; i<n ;i++)
        cout<<a[i]<<endl;
}

使用这样的代码,当我为n输入7时,我只能使用它六次。(例如,如果我想进入星期日,星期一,......,星期六,我不能进入最后一次一个星期六。)结果如下: see? I can't not enter the 'Saturday'

但是如果我添加一行代码,那就是

cin.get();

并且像这样:

int main()
{
       char a[10][10];
       int n=0;
       cin>>n;
       cin.get()
      for (int i=0; i<n;i++)
        cin.getline(a[i],10);
      for (int i=0; i<n ;i++)
        cout<<a[i]<<endl;
}

当我为n输入7时,我可以使用该代码七次(这意味着我可以在第七次进入星期六)。

为什么? (结果如下所示:)I can enter my 'Saturday' now

结果如下:

我的意思是,我先输入7,然后进入星期日,星期一,......,星期六......

3 个答案:

答案 0 :(得分:1)

cin读取7,然后getline()读取换行符并将其视为空白行,并且程序正确输出空白行。对输出行进行编号以使其更清晰。

答案 1 :(得分:1)

它不会“剥离”任何东西!
它会在输入数字7后立即读取您在控制台中输入的换行符。

它可以防止第一个getline调用成为浪费并导致空字符串。

答案 2 :(得分:1)

我认为您已经知道答案:cin.get()会消耗cin>>n;剩余的新行(&#39; \ n&#39;)字符。

当您不打电话给cin.get()时,将会读取剩余的新行,并为第一个cin.getline(a[i],10)返回一个空字符串,然后返回包含值的6行。