|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
书上有个例子一直不太明白,求助各位大神
下面是例子的一部分(头文件省略)
int guess =1;
printf("is you number %d?\n",guess)
while(getchar()!='y')
{
printf("is it %d?\n",++guess);
while(getchar()!='\n') /*跳过剩余的输入行*/
continue;
}
在这个例子中,假设用户输入的是noitisnot
我一直以为,第一个外层while循环需要一个字母一个字母的读用户输入(因为getchar每次职能读一个字符),它先读n,于是n进入大循环
大循环里面的printf("is it %d?\n",++guess)打印完了以后,n进入下一句也就是里面的while小循环,然后结束。
接下来外层while大循环再读下一个用户输入u,把整个循环再跑一遍。
但如果是这样,就没法实现小循环”跳过剩余的输入行“这个功能了
可是如果要实现这个功能,外层的while循环就要每次把用户输入的字母全都读进来,让noitisnot全部进入循环,可是getchar()每次职能读一个字母啊。。。
所以只剩下一种情况:
外层大循环先读一个字母,然后打印那一行,接着里面小循环读剩下的字母,用continue不断的跳过剩余的字母,循环结束。
然而问题是,里层的小循环是大循环的一部分,大循环只读了一个字母,那么应该就只有一个字母先进入循环,等把循环内容全部跑一遍再放第二个字母进来
小循环为什么可以直接读后面的字母?
这是一个while的循环嵌套,也就是while里面还有一个while。至于这个getchar,这个程序有两个getchar,外层while一个,内层while一个。每使用一次getchar他就会从输入流里面读取一个字符。至于你说的 noitisnot 这几个字母,首先是外层循环也就是第一个while读一个 n ,然后进入外层,printf打印一下,此时就要执行内层循环了,内层循环还有一个 getchar ,就要再获得一个,也就是获得了 n 后面的 o 这个字符
|
|