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
相关产品推荐
相关产品推荐

