如何在循环中独立统计奇数数量——解决C++程序奇数计数累计叠加问题
解决C++程序中奇数计数累加的问题
嘿,这个问题其实很常见,核心原因就是你的计数器变量初始化时机不对!
你把odd变量定义在do-while循环的外面,所以它的数值会在多次循环之间保留下来,导致每次新的统计都会在上一次的结果上累加。要实现每次输入10个整数都独立统计,只需要确保每次循环开始时计数器都被重置为0就行,这里有两种简单的解决方式:
方案1:将计数器移到循环内部初始化
把int odd = 0;放到do代码块的最开头,这样每次进入循环时,都会创建一个全新的计数器并初始化为0,完美避免累加问题:
int i, value; char option; do { int odd = 0; // 每次循环开始时重置计数器 for (i=1;i<=10;++i) { cout << "Enter integer no. " << i << ": "; cin >> value; // 优化:兼容负数的奇数判断方式 if (value % 2 != 0) { odd++; } } cout << "\nThere are " << odd << " odd numbers.\n"; cout << "\nDo you want to try again? \nEnter Y for Yes and N for No: "; cin >> option; if (option == 'N') { cout << "\nThank you for using this program. \nProgram Terminating!"; break; } } while (option == 'Y'); return 0;
方案2:手动重置计数器值
如果你需要让odd变量在循环外也能访问(比如后续有其他逻辑需要用到它),可以在每次循环开始时手动将其重置为0:
int i, value; int odd = 0; char option; do { odd = 0; // 手动重置计数器为0 for (i=1;i<=10;++i) { cout << "Enter integer no. " << i << ": "; cin >> value; if (value % 2 != 0) { odd++; } } // 后续输出和判断逻辑不变 cout << "\nThere are " << odd << " odd numbers.\n"; cout << "\nDo you want to try again? \nEnter Y for Yes and N for No: "; cin >> option; if (option == 'N') { cout << "\nThank you for using this program. \nProgram Terminating!"; break; } } while (option == 'Y'); return 0;
额外小提示
原代码中value % 2 == 1的判断逻辑在处理负奇数时会出错(比如-1 % 2在C++中结果是-1,不等于1),改成value % 2 != 0或者(value & 1) == 1可以兼容所有整数的奇数判断哦!
内容的提问来源于stack exchange,提问作者ANTOINE
相关产品推荐
相关产品推荐

