查了各种博客和资料,大致知道了原因:这些具体输入的具体执行情况是不一致的,汇总如下:
/*
cin.peek()返回输入流的下一个字符,其不会从输入流提取字符,
故当其检测到'\n'时即结束输入,但由于其不提取输入流的字符,
故要注意对输入流中的'\n'进行处理,即在其后添加fflush(stdin),
以清空缓存。
*/
//while(ch!='\n');或者while(ch!='\n');//不可行
/*
getchar()(cin.get()同理)的过程详细分析:
输入的数据实际上的流向是: 输入设备->内存缓冲区->程序getchar
首先,先读入p[1](即对p[1]赋值),ch=getchar()读取下一个字符,即ch=p[2],
再读入p[2],ch=getchar()读取下一个字符,即ch=p[4],以此类推下去。
*/
//while(p[i]!='\n');//不可行
/*
cin根据后面变量的类型读入数据,其输入结束条件是遇到空格、回车或Tab键;
其对结束字符的处理是:丢弃缓冲区中的结束符(即空格、回车或Tab键),
因此,使用cin>>p[i]会对回车等结束符,故这是一个永真循环,永远无法得到回车符,
也就不能依此写循环判别的条件了。
*/
//while(getch()!='\n');//不可行
/*getch()的过程详细分析:
首先读入p[1],之后等待键盘输入,如果键盘输入为回车(其ASC码为13,注意:不能写成ch!='\n'),
因为ch存放的并不回车(可以通过输出验证:当输入回车时ch=' '),则输入退出,此时只得到p[1]的输入
(即使输入的是"123"),否则继续输入p[2],以此类推下去。
由此可知,采用该方法输入显得异常麻烦,故不推荐。
*/