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

C语言如何使用scanf()读取[1,3,2,4]格式输入并赋值给arr数组

实现方案

固定长度(4个元素)最简实现

你的输入是固定[数字,数字,数字,数字]结构的场景下,直接用scanf匹配非数值的分隔符即可,scanf会自动对齐格式串中除转换说明符外的字符,和输入对应位置做匹配。

#include <stdio.h>

int main(void) {
    int arr[4];
    // 格式串里的 [、, 会直接匹配输入中的对应符号
    scanf("[%d,%d,%d,%d]", &arr[0], &arr[1], &arr[2], &arr[3]);
    
    // 测试输出验证结果
    for(int i = 0; i < 4; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

逻辑说明

  • 格式串开头的[会匹配输入第一个字符的左方括号
  • 每两个%d之间的,会匹配输入里数字之间的逗号
  • 末尾的]匹配输入最后的右方括号
  • 输入[1,3,2,4]运行后,arr数组就会被赋值为{1,3,2,4}

兼容不定长度元素的实现

如果后续需要适配元素数量不固定的同格式输入,可以用循环读取的方式:

#include <stdio.h>
#define MAX_ARR_LEN 1024 // 按实际需求调整数组最大长度

int main(void) {
    int arr[MAX_ARR_LEN];
    int len = 0;
    // 先吃掉输入开头的左方括号
    getchar();
    while(len < MAX_ARR_LEN) {
        int num;
        // 读取数字,读取失败直接终止
        if(scanf("%d", &num) != 1) break;
        arr[len++] = num;
        // 读取数字后的分隔符
        char sep = getchar();
        if(sep == ']') break;
        // 分隔符是逗号就继续下一轮读取
    }
    // 此时len为实际读取到的元素个数
    return 0;
}

注意事项

  • 如果输入的方括号、逗号前后带有空格,可以在格式串的对应位置加空格兼容,比如scanf(" [%d , %d , %d , %d ]", ...)就可以识别[ 1, 3 , 2,4 ]这类带空格的输入
  • 可以判断scanf的返回值是否等于预期读取的元素个数,避免非法输入导致数组赋值错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:11