根据我老师的课程,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时,我只能使用它六次。(例如,如果我想进入星期日,星期一,......,星期六,我不能进入最后一次一个星期六。)结果如下:
但是如果我添加一行代码,那就是
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时,我可以使用该代码七次(这意味着我可以在第七次进入星期六)。
为什么? (结果如下所示:)
结果如下:
我的意思是,我先输入7,然后进入星期日,星期一,......,星期六......
答案 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行。