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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:50:26