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

统计输入中每个值出现了多少次:

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;

编译通过,运行程序时:

一个程序看C++中输入作为判断语句的逻辑_第1张图片

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


一个程序看C++中输入作为判断语句的逻辑_第2张图片

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



分析下程序,可以知道:

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;
			}
		}

第一个输入的数字,在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。

但是,此时有个问题,若是

一个程序看C++中输入作为判断语句的逻辑_第3张图片

输入数字后直接按回车,输出结果只有两行,为什么会这样?

原因是第一个if()的判断语句输入的变量是一个整型,所以,只有当输入不是整型数值或者EOF时,才能正真的执行程序。

所以46得要有另一个整型输入才有今日while循环。

一个程序看C++中输入作为判断语句的逻辑_第4张图片


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



那第二种输入方法为什么这么别扭呢?

原因在于:输入一个数,按下回车,进入下一次循环,并用下一个输入的值来触发while及while中的if。




所以,由这个程序我们可以知道,在C++中,我们调试和使用程序时,需要弄清楚:

1.变量的输入类型;

2.if和 for while 循环终结的条件;

3.正确使用程序的方法,需要早弄懂程序基础上才能正确的使用程序。

//*************************************************************************************************************************

参考文献:《C++ primer 中文版》(第五版)



你可能感兴趣的:(C++,自学笔记)