C语言数组数字7计数异常及多位数含7统计需求求助
问题1:数组含7但计数为0的排查与修复
导致计数为0的常见原因及修复方案:
- 判断条件混淆整数与字符:如果数组存的是整数,却用
if (arr[i] == '7')判断(字符'7'的ASCII值是55,和整数7不相等),永远触发不了计数。要改成if (arr[i] == 7);反之如果数组存的是字符形式的数字,要判断等于'7'而非整数7。 - 循环遍历范围错误:比如数组长度为n,循环写成
for (int i = 0; i < n-1; i++),漏了最后一个元素;或是在函数中传递数组时,用sizeof(arr)/sizeof(arr[0])计算长度会出错(数组退化为指针,sizeof(arr)是指针长度),这种情况需要手动传入数组长度。 - 计数变量未初始化:如果
int count;没设初始值0,初始值是随机垃圾值,但如果最终输出0,大概率是前面两个原因,但还是要确保count初始化为0。 - 输入逻辑错误:比如用
scanf存整数时用了%c格式符,导致数组里存的不是预期的数字。
举个错误修正的例子:
错误代码片段(整数和字符判断混淆):
int arr[5] = {7,2,3,7,5}; int count = 0; for(int i=0; i<5; i++){ if(arr[i] == '7'){ // 错误:整数7和字符'7'不相等 count++; } } printf("7的数量:%d\n", count); // 输出0
修正后:
int arr[5] = {7,2,3,7,5}; int count = 0; int len = sizeof(arr)/sizeof(arr[0]); for(int i=0; i<len; i++){ if(arr[i] == 7){ // 正确:判断整数7 count++; } } printf("7的数量:%d\n", count); // 输出2
问题2:统计多位数中的7(无需重写代码)
不需要完全重写,只要修改数字的判断逻辑,把每个多位数拆成单个数字逐一检查即可。可以写一个辅助函数处理单个数字的7统计,再遍历数组累加总数。
示例代码:
#include <stdio.h> // 统计单个数字里7的个数 int count_seven(int num){ int cnt = 0; // 处理负数(如果数组可能包含负数) if(num < 0) num = -num; do{ int digit = num % 10; if(digit == 7) cnt++; num /= 10; }while(num != 0); // do-while确保num为0时也能进入一次循环(不过0里没有7,不影响结果) return cnt; } int main(){ int arr[5] = {7, 753, 172, 34, 77}; int total = 0; int len = sizeof(arr)/sizeof(arr[0]); for(int i=0; i<len; i++){ total += count_seven(arr[i]); } printf("总共有%d个7\n", total); // 输出:总共有5个7 return 0; }
逻辑说明:
- 辅助函数
count_seven通过num%10提取个位数字,判断是否为7,再用num/10去掉个位,循环直到num变为0。 - 主函数遍历数组时,把每个元素的7的个数累加到总数中,既兼容原来的单个7的情况,也能处理多位数(比如753里有1个7,77里有2个7)。
内容的提问来源于stack exchange,提问作者user17609908
相关产品推荐
相关产品推荐

