您的位置:首页 > 编程语言 > C语言/C++

一个程序看C++中输入作为判断语句的逻辑

2018-02-27 13:19 288 查看
统计输入中每个值出现了多少次:int currVal = 0, val = 0;
if (std::cin >> currVal) {
int cnt = 1;
while (std::cin >> val) {
if (val == currVal)
++cnt;
else {
std::cout << currVal << " occurs " << cnt << "times" << std::endl;
currVal = val;
cnt = 1;
}
}

std::cout << currVal << "occurs" << cnt << "times " << std::endl;}return 0;编译通过,运行程序时:



一排输入一组数据,并以空格隔开,这样是该程序的正确输入方法。



在输入一个数字,按一次回车时,会发现与前面所得出的结果不同。

分析下程序,可以知道:if(std::cin >> currVal)是判断是否有整数输入,是整个程序的最核心部分入口,当输入第一个数时,程序便进入了if的body 中。
此时,定义整型变量:int cnt=1;cnt是一个计数器的作用,常用在while 和 for循环中做记录次数之用。本程序中作为记录相同值得次数之用。

接着程序进入到最重要的while body中:while (std::cin >> val) {
if (val == currVal)
++cnt;
else {
std::cout << currVal << " occurs " << cnt << "times" << std::endl;
currVal = val;
cnt = 1;
}
}第
4000
一个输入的数字,在if()的判断中被储存到了 cuurVal 中,而while()的判断中任然在不断的往 val 中输入新的数值;
在while body 中的if()判断的是“val == currVal”,若是相等,则计数器cnt加1;
 例如我们输入三个数字:12 12 12,则第一个数字12储存到currVal中(ps.  currVal 意义为当前数值),意思就是当前数值为12,将第二个数值12存储到val中,然后比较,若是相等,则cnt+1;若不相等,则输出计数器,并将新的值存储到currVal中。
所以到最后输出的值为12。
但是,此时有个问题,若是



输入数字后直接按回车,输出结果只有两行,为什么会这样?
原因是第一个if()的判断语句输入的变量是一个整型,所以,只有当输入不是整型数值或者EOF时,才能正真的执行程序。
所以46得要有另一个整型输入才有今日while循环。



当我们输入最后一个数值为字符型'a'时,才能真正的执行并结束程序,这才是本程序的正确使用方法。

那第二种输入方法为什么这么别扭呢?
原因在于:输入一个数,按下回车,进入下一次循环,并用下一个输入的值来触发while及while中的if。

所以,由这个程序我们可以知道,在C++中,我们调试和使用程序时,需要弄清楚:
1.变量的输入类型;
2.if和 for while 循环终结的条件;
3.正确使用程序的方法,需要早弄懂程序基础上才能正确的使用程序。
//*************************************************************************************************************************
参考文献:《C++ primer 中文版》(第五版)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐