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

C语言读取逗号分隔整数存入带问号数组的scanf校验问题

问题解决方法

原有代码的核心问题

  • 基础语法错误:数组名误用(定义为Array1却用Array访问)、char类型数组用来存储%d读取的整数会导致溢出、循环判断的是未赋值的数组元素,逻辑本身无法正常运行
  • 校验失效原因:scanf格式串中的分隔符如果匹配失败,不会主动抛出错误,你没有判断scanf的返回值,就无法确认逗号是否真实存在,因此分隔符校验完全不生效。%d,格式下如果读完整数后下一个字符不是逗号,scanf只会返回已读到的整数数量(返回值为1),不会终止程序,相当于直接跳过了逗号校验。

正确实现方案

#include <stdio.h>
#define MAX_SIZE 100

int main() {
    int arr[MAX_SIZE];
    int count = 0;
    int num;
    char delimiter;

    while (count < MAX_SIZE) {
        // 同时读取整数和后续的分隔符,通过返回值判断读取是否成功
        int ret = scanf("%d%c", &num, &delimiter);
        if (ret != 2) {
            printf("输入格式错误\n");
            return 1;
        }

        arr[count++] = num;

        // 明确校验分隔符类型
        if (delimiter == '?') {
            // 读到结束标志,终止循环
            break;
        } else if (delimiter != ',') {
            printf("格式错误:数字间必须用逗号分隔,末尾需用问号结束\n");
            return 1;
        }
    }

    // 测试输出读取结果,可根据需求删除
    printf("读取到的%d个整数:\n", count);
    for (int i = 0; i < count; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

逻辑说明

  • 每次调用scanf后强制校验返回值:只有返回值为2时才代表成功读取到了整数和后续的分隔符,其余情况直接判定为输入不合法
  • 分隔符二次校验:读取到分隔符后直接判断是逗号还是问号,其余字符都判定为格式错误,完全规避了scanf默认跳过校验的问题
  • 增加了数组越界防护,避免输入内容过长导致缓冲区溢出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:54:05