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

C语言数组scanf输入问题:sizeof异常及高效输入方案咨询

C语言手机号数组输入问题解答

1. 为何sizeof(phoneNum)的结果是40而非10?

sizeof运算符计算的是变量或类型占用的总字节数,不是元素个数。在多数系统中,int类型占4字节,你定义的phoneNum是包含10个int元素的数组,总字节数就是10 * 4 = 40。如果要获取数组的元素个数,需要用sizeof(phoneNum) / sizeof(phoneNum[0]),这个表达式会用总字节数除以单个元素的字节数,得到准确的元素数量10。

2. 如何通过scanf成功为该数组添加元素?

你原来的循环条件用了i < sizeof(phoneNum),也就是循环会执行40次,但数组只有10个元素,不仅会让程序持续要求输入,还会导致数组越界(访问超出数组范围的内存),这是未定义行为。

修改循环条件,用数组的实际元素个数来控制循环即可,推荐用sizeof计算元素个数的方式,这样数组大小改动时不用手动修改循环条件:

#include <stdio.h>

int main() 
{
    int phoneNum[10];
    // 计算数组元素个数
    int count = sizeof(phoneNum) / sizeof(phoneNum[0]);
    
    for (int i = 0; i < count; i++) {
        printf("Insert digit %d of your phone number: \n", i + 1);
        scanf("%d", &phoneNum[i]);
    }

    return 0;
}

3. 上述逐个输入的方式不够合理,有更通用高效的输入方式

逐个输入10个数字效率低,用户体验差,而且代码通用性差。更优的方式是直接输入整个10位手机号字符串,再将每个字符转换为数字存入数组,同时可以实现基于数组大小的通用逻辑:

通用实现示例

#include <stdio.h>
#include <string.h>

// 通用输入函数:接收数组指针和数组大小
void inputPhoneDigits(int *digits, int size) {
    char input[20];
    printf("Enter your %d-digit phone number: \n", size);
    scanf("%s", input);

    // 校验输入长度是否符合要求
    if (strlen(input) != size) {
        printf("Error: Please enter exactly %d digits.\n", size);
        return;
    }

    // 将字符转换为数字(利用ASCII码差值:'0'的ASCII是48,字符减'0'得到对应数字)
    for (int i = 0; i < size; i++) {
        digits[i] = input[i] - '0';
    }
}

int main() {
    const int PHONE_DIGIT_COUNT = 10;
    int phoneDigits[PHONE_DIGIT_COUNT];

    inputPhoneDigits(phoneDigits, PHONE_DIGIT_COUNT);

    // 验证输入结果
    printf("Your phone digits: ");
    for (int i = 0; i < PHONE_DIGIT_COUNT; i++) {
        printf("%d ", phoneDigits[i]);
    }
    printf("\n");

    return 0;
}

这种方式的优势:

  • 高效便捷:用户只需输入一次完整手机号,无需逐个输入数字
  • 通用性强:函数接收数组大小参数,不管是10位还是其他长度的数字序列都能适配
  • 保留前导0:如果手机号以0开头,字符串方式可以完整保留,而用数字类型存储会丢失前导0
  • 输入校验:可以快速判断输入长度是否符合要求,避免错误输入

内容的提问来源于stack exchange,提问作者Stamatis Tzanos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:20:22