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

本文探讨了一个C++程序,该程序用于统计输入的一组数字中每个值出现的次数。关键在于理解if判断语句和while循环的工作原理,以及如何正确处理输入。当输入非整数或EOF时,程序才会执行。正确使用该程序需要了解变量输入类型、循环结束条件以及程序的运行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

第一个输入的数字,在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 中文版》(第五版)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值