一个程序看C++中输入作为判断语句的逻辑
2018-02-27 13:19
288 查看
统计输入中每个值出现了多少次:int currVal = 0, val = 0;
if (std::cin >> currVal) {
int 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 中文版》(第五版)
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 中文版》(第五版)
相关文章推荐
- 编写一个计算某个月份的天数程序,请用if-else条件语句实现。要求根据用户输入的月份,判断出月份所包含的天数。
- 2. 编写一个Java应用程序,用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、32
- 用C++写一个日历程序,要求输入年份,显示全年的日历
- c语言:不用if,else语句,也不用循环条件等,输入一个字符,判断是否为大写字母
- C++第六周任务4设计一个三角形类,能够输入三角形的三个顶点,求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
- 用 switchcase语句写一个程序 输入整数 直到输入0 计算偶数的个数 奇数的个数 和偶数的平均值 与奇数的平均值
- 如何判断一个程序是C编译的还是C++编译的
- 问题:利用 C++的各种控制语句编写一个万年历程序。 要求:显示任何年份的日历,日历以月份顺序排列,每月以星期顺序排列,类似于一 般挂历上的格式。
- 编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。
- 作为c++初学者 又给大家带来一个小程序 英文句子的首字母大写
- 自己动手写一个判断网址合法的C/C++的正则表达式程序
- 以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:
- zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。 输入 第一行只有一个正整数N(N<=
- 一个简单的C++程序:输入三角形3边,求其周长
- 编写一个Java程序,用if-else语句判断某年份是否为闰年。
- 编写一个程序 把输入作为字符流读取 直到遇到EOF 报告单词的平均字母数(图)
- JAVA--第2周实验--用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数
- c程序:编写程序,其中自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数
- C++控制台程序判断输入的数字
- 8.2 习题编写一个程序,在遇到EOF之前,把输入作为字符流读取,程序需要打印每个输入的字符及其相应的ASCLL十进制..........