关于getchar还是弄不清,求C高手帮忙,谢谢
以下是C Primer Plus里面的一个例子,叫guess.c
重点是内循环while抛弃一行中除了首字母后的其余字符(包括换行符)
而内循环条件明明是 != '\n'
求正解,谢谢
#include <stdio.h>
int main(void)
{
int i = 1;
printf("我猜你心里想的数字是(y说明正确,n说明错误)%d\n",i);
while(getchar() != 'y')
{
printf("哦,那会不会是%d?\n",++i);
while(getchar() != '\n')
continue;
}
printf("就是这样,疑问是内循环while为啥会连同最后输入的换行符一块抛弃?\n");
printf("我不用内循环while就会出现点一个字母后,出来两个数字,因为记录了回车\n");
printf("用了内循环,但是内循环是说只要不是回车就抛弃,为啥还会抛弃换行符呢?\n");
return 0;
}
追问:纠结了一天,发现了一个灵感,我最后理解为,getchar好像一个消耗器,读取的同时就消耗掉了那个字符,同时也进入了输入流里,要不要拿它来起什么作用,就看循环内容,如果什么也不做就是抛弃。内循环里的getchar,循环一次,就消耗掉一个字符,等到最后一个换行符的时候,它也消耗了,但是消耗掉了才发现,它是换行符,不满足内循环条件,于是退出了内循环,此时所输入的字符串中,就只剩下了首字母。
答案:因为今天没有编译器,所以就根据问题说一下,貌似我之前的一个回答中已经说明过了所有的问题了,因为数据的输入确认使用的是回车键,所以在进行编译的时候,一旦遇到回车键就会自动跳过continue,又因为第二个getchar没有对任何一个数据赋值,所以只是执行输入而不执行存储,相当于只是其判断作用。
上一个:电脑被远程控制,求帮助, 知道这是违法行为,该如何处理,怎么截取证据.
下一个:有没有C++的MFC教程?看孙鑫老师的好难懂哦...