如何为C语言矩阵输入代码添加用户输入验证功能?
C语言二维数组输入验证:确保每行元素数量匹配列数
你的原始代码
#include <stdio.h> int main() { int x, y, i, j; printf("number of rows: "); scanf("%d", &x); printf("number of columns: "); scanf("%d", &y); int sample_arr[x][y]; printf("\nEnter elements of the array:\n\n"); for (i = 0; i < x; i++){ printf("Row %d: ", i+1); for (j = 0; j < y; j++){ scanf("%d", &sample_arr[i][j]); } } // 后续代码省略 return 0; }
当前问题
当输入的元素数量少于列数时,程序会一直等待输入,没有任何提示,用户无法快速定位问题。需要实现输入验证:如果每行输入的元素数量不等于列数,立即提示错误并重新要求用户输入该行。
解决方案
核心思路是先读取整行输入,再解析其中的数字并统计数量,以此判断输入是否符合要求。具体实现如下:
#include <stdio.h> #include <string.h> int main() { int x, y, i, count, num; char buffer[1024]; // 存储整行输入内容 printf("number of rows: "); scanf("%d", &x); printf("number of columns: "); scanf("%d", &y); // 清空scanf留下的换行符,避免fgets读取空行 getchar(); int sample_arr[x][y]; printf("\nEnter elements of the array:\n\n"); for (i = 0; i < x; i++){ while(1) { printf("Row %d: ", i+1); // 读取整行输入 if (fgets(buffer, sizeof(buffer), stdin) == NULL) { // 处理输入异常 return 1; } count = 0; char *ptr = buffer; int offset; // 解析行内所有整数并计数 while (sscanf(ptr, "%d%n", &num, &offset) == 1) { if (count < y) { sample_arr[i][count] = num; } count++; ptr += offset; // 移动指针到下一个数字起始位置 } // 验证元素数量是否匹配列数 if (count == y) { break; // 输入正确,进入下一行 } else { printf("请确保您输入的元素数量与列数一致,以构成矩阵!\n"); } } } // 可选:输出验证后的矩阵 printf("\n你输入的矩阵是:\n"); for (i = 0; i < x; i++) { for (int j = 0; j < y; j++) { printf("%d ", sample_arr[i][j]); } printf("\n"); } return 0; }
关键说明
- 清空输入缓冲区:
scanf读取行数和列数后,缓冲区会残留换行符,调用getchar()可避免fgets直接读取空行。 - 整行读取:用
fgets获取用户输入的整行内容,确保能捕获所有输入的数字和分隔符。 - 数字解析与计数:通过
sscanf循环解析行内整数,%n用于获取本次解析消耗的字符数,方便移动指针定位下一个数字;同时统计解析到的数字数量。 - 验证与重试:若统计的数字数量不等于列数
y,输出提示并重新读取该行,直到输入符合要求为止。
内容的提问来源于stack exchange,提问作者salierii
相关产品推荐
相关产品推荐

