new_line函数求指教!

yaoxinchao 2011-05-27 04:13:57
void new_line()
{
char symbol;
do
{
cin.get(symbol);
}while(symbol != '\n');
}
new_line()函数调用读取当前行上剩余的所有字符(这个好理解),但不对他们进行任何处理,这相当于丢弃该行剩余的所有字符(这句话不知道怎么丢弃的,如何理解)!
例如以下函数调用:
void get(int& a)
{char ans;
do
{
cin》》a;
cout《《“yes or no ”;
cin>>ans;
new_line();
}while((ans != 'y')&&(ans != 'Y'));
}

望解释一下
...全文
164 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
就想叫yoko 2011-05-27
  • 打赏
  • 举报
回复
ans是从缓冲区拿一个字节
这个就好比队列了
先进先出
yaoxinchao 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 q191201771 的回复:]

是这样的
cin>>读取数据时不读入回车
而cin.get()会读入回车

当你cin>>ans;时
你只输入一个字符回车, 那自然是没问题, 下次循环又能输入, 直到ans是y为止

但是当你一次输入abc回车时
那么ans将分别接收a b c, 即循环做了三次

加上new_line()的作用就是当你一次输入abc回车后
ans只得到a, b c 回车都被它循环从缓冲区……
[/Quote]
为什么ans保留的是第一个字符a而不是最后一个字符呢?
yaoxinchao 2011-05-27
  • 打赏
  • 举报
回复
弱弱的问一下:想了解缓冲区这些知识,对程序有内纯分配机制,程序执行等有更深的了解,该看什么书呢?怎样培养这方面的能力呢?
就想叫yoko 2011-05-27
  • 打赏
  • 举报
回复
最后一句话是
ans只得到a
b c 回车都被它循环从缓冲区读取掉了[Quote=引用 5 楼 q191201771 的回复:]

是这样的
cin>>读取数据时不读入回车
而cin.get()会读入回车

当你cin>>ans;时
你只输入一个字符回车, 那自然是没问题, 下次循环又能输入, 直到ans是y为止

但是当你一次输入abc回车时
那么ans将分别接收a b c, 即循环做了三次

加上new_line()的作用就是当你一次输入abc回车后
ans只得到a, b c 回车都被它循环从缓冲区……
[/Quote]
就想叫yoko 2011-05-27
  • 打赏
  • 举报
回复
是这样的
cin>>读取数据时不读入回车
而cin.get()会读入回车

当你cin>>ans;时
你只输入一个字符回车, 那自然是没问题, 下次循环又能输入, 直到ans是y为止

但是当你一次输入abc回车时
那么ans将分别接收a b c, 即循环做了三次

加上new_line()的作用就是当你一次输入abc回车后
ans只得到a, b c 回车都被它循环从缓冲区读取掉了
yaoxinchao 2011-05-27
  • 打赏
  • 举报
回复
输入abcde是调用执行new-line()结束后,再判断其后while还是怎样的呢?如果执行完new-line后在判断while,symbol当时存储的应该是‘\n’啊
yaoxinchao 2011-05-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q191201771 的回复:]

void new_line()
{
char symbol;
do
{
cin.get(symbol);
}while(symbol != '\n');
}

意思是你输入abcde回车
symbol由a变成被b覆盖, 又被c覆盖
知道最后symbol只存了一个'\n'
[/Quote]
然后new—line被调用,传给while循环判断是怎样将Y或N传给ans的呢?
就想叫yoko 2011-05-27
  • 打赏
  • 举报
回复
void new_line()
{
char symbol;
do
{
cin.get(symbol);
}while(symbol != '\n');
}

意思是你输入abcde回车
symbol由a变成被b覆盖, 又被c覆盖
知道最后symbol只存了一个'\n'
bdmh 2011-05-27
  • 打赏
  • 举报
回复
是呀,就是循环接受的字符,然后当碰到结束符时,就不读了,也就是后面的字符都不要了,只要第一个结束符前面的字符

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧