You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:31:20