如何在C语言排序程序中阻止用户输入非数字字符?
C语言排序程序添加输入验证的实现方案
原代码中,当用户输入字母、符号这类非整数内容时,scanf("%d")会读取失败,错误输入会滞留在输入缓冲区,导致后续输入逻辑混乱,程序可能陷入异常循环或输出错误结果。以下是添加输入验证后的完整代码及关键逻辑说明:
修改后的完整代码
#include <stdio.h> // 获取有效整数输入的辅助函数 int getValidInt() { int num; // 循环直到读取到有效整数 while (scanf("%d", &num) != 1) { // 清空缓冲区中的错误输入内容 while (getchar() != '\n'); printf("输入无效,请输入一个整数:"); } return num; } int main() { int number[30]; int i, j, a, n; printf("Enter the value of N: "); n = getValidInt(); // 限制N的有效范围,避免数组越界 while (n < 1 || n > 30) { printf("N的范围需为1-30,请重新输入:"); n = getValidInt(); } printf("Enter the numbers: \n"); for (i = 0; i < n; ++i) { printf("请输入第%d个数字:", i+1); number[i] = getValidInt(); } // 原有排序逻辑保持不变 for (i = 0; i < n; ++i) { for (j = i + 1; j < n; ++j) { if (number[i] < number[j]) { a = number[i]; number[i] = number[j]; number[j] = a; } } } printf("The numbers arranged in descending order are given below:\n"); for (i = 0; i < n; ++i) { printf("%d\n", number[i]); } return 0; }
关键逻辑说明
- 输入验证核心:
scanf("%d", &num)的返回值为成功读取的变量个数,若用户输入非整数,返回值不等于1,此时进入循环提示重新输入。 - 缓冲区清理:
while (getchar() != '\n');会读取并丢弃缓冲区中所有错误输入(直到换行符),避免残留内容干扰后续输入操作。 - 范围限制:新增对
n的范围判断,确保输入的数组长度在定义的数组容量(1-30)内,防止数组越界问题。
内容的提问来源于stack exchange,提问作者FullMetal
相关产品推荐
相关产品推荐

