C++书上我有一处看不懂,请大家帮帮忙!

来源:百度知道 编辑:UC知道 时间:2024/06/17 14:18:59
书上有个例子我看不懂,讲解了我还是不懂.
其他部分都省略了,我就写我要问的部分吧!
void new_line()
{char symbol;
do
{cin.get(symbol);}while(symbol!='\n');
}

void get_int(int& number)
{char ans;
do
{cout<<"Enter input number:";
cin>>number;
cout<<"You entered"<<number<<"Is it right?(yes/no)";
cin>>ans;
new_line();
}while(ans!='y'||ans!='Y');
}
我不理解的是new_line函数。书上说new_line函数读取当前行上剩余的所有字符,但不对它们进行任何处理,
这相当于丢弃该行剩余的所有字符。因此,用户输入No时,程序就读取第一个字母N,再调用new_line函数,
该函数丢弃输入行中剩余的所有字符。这表示如果用户在下一个输入行输入75,程序就读取75,但不会读取
No的字母o.如果程序不包含对new_line函数的调用,那么读取的下一行就是包含No的那一行上的o,而非下一个数字75.

那我就假设先输入57然后输入No然后程序调用new_line(),那为什么会丢弃那一行的其他字符呢?是不是
new_line()中第一次循环先读取o,未到'\n'然后再循环第二次,这时读取到了'\n'就跳出循环?这就说明o
已经被读取了,当执行get_int的第二次循环时,程序读取的就不是o,因为o和'\n'都已经被读取了,就不会再一次被读取了。是这样吗?

请用一个具体输入例子

首先 你输入 57 , 回车 那么57被读入到 number 里面了.(你输入57NO也一样是读入57,因为number是int)
然后你输入NO,这时候第一个N被读入到了ans里面,然后当你输入"NO"里的"O"时,程序已经进入了new_line()涵数,O被NEW_LINE读入,NEW_LINE读入后不对O做任何处理,也就是所谓丢弃了,直到接受到 回车,程序结束.
换句话说这个程序, Is it right?(yes/no) 的时候, 你输入 Y 和输入 YES 和 输入 YDSFASDFSADFGDSGDFG 结果都是一样的.当然你输入 N 和输入 NO 和输入 NYDAFISDDJ 甚至 ADFASDF 结果都一样.

首先你要弄清楚do-while的用法,
do-while的用法是先do后判断条件;
可能是你对代码有所删减,所以这段代码看起来很痛苦,建议你以后遇到类似问题就去做代码调试,跟着代码一步一步走,这样 你就会明白他的执行顺序了,编程这东西说简单挺简单,要说复杂那深了,慢慢来吧!

这个东西,你单步调试就好了,何必要在这里等着问呢?反正你已经可以运行了,直接单步调试,什么都出来了!!!

下一次输入数字就是重新执行do循环体所以会从新输出Enter input number:"; 之后在输入Y回车进入下一次循环