如何将6位数字输入存入整数数组,使数组元素为单个数字?
将6位数字拆分到整数数组的解决方案
你的原代码存在问题:scanf("%d%d%d%d%d%d", &input);中,&input是整个数组的指针(类型为int (*)[7]),而每个%d需要单个int变量的地址(int*),类型不匹配会导致未定义行为。以下是两种可行的解决方法:
方法一:直接按单个数字读取
利用scanf的%1d格式限定符,强制每次读取1位数字,直接存入数组对应位置:
#include <stdio.h> int main(void) { int input[7] = {0}; printf("请输入6位数字:"); // 逐个读取单数字,存入数组的前6个元素 scanf("%1d%1d%1d%1d%1d%1d", &input[0], &input[1], &input[2], &input[3], &input[4], &input[5]); // 验证结果 for (int i = 0; i < 6; i++) { printf("%d ", input[i]); } printf("\n"); return 0; }
%1d会自动忽略输入中的空白字符(如果有的话),但你要求输入无标点空格,所以连续输入6位数字即可被正确拆分。
方法二:先读整数值再拆分数字
如果能确保输入是有效的6位整数,可先读取整个数字,再通过数学运算拆分每一位:
#include <stdio.h> int main(void) { int input[7] = {0}; int num; printf("请输入6位数字:"); scanf("%d", &num); // 拆分每一位到数组 input[0] = num / 100000; // 提取十万位 input[1] = (num / 10000) % 10; // 提取万位 input[2] = (num / 1000) % 10; // 提取千位 input[3] = (num / 100) % 10; // 提取百位 input[4] = (num / 10) % 10; // 提取十位 input[5] = num % 10; // 提取个位 // 验证结果 for (int i = 0; i < 6; i++) { printf("%d ", input[i]); } printf("\n"); return 0; }
这种方法需要确保输入的数字在int的范围内(一般int能覆盖到2^31-1,6位数完全没问题),如果输入位数不符,需要额外做合法性判断。
内容的提问来源于stack exchange,提问作者Richard Bryan
相关产品推荐
相关产品推荐

