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

C语言array[i]可否与数字比较?信用卡输入仅运行1次如何修改?

问题解答

1. C语言中是否可以直接对array[i]和数字做大小比较?

可以。只要array[i]是整数、浮点数这类算术类型,和数字字面量做大小比较是C语言原生支持的合法操作,你写的array[i] > 999 && array[i] < 9999这段比较逻辑本身语法没有问题。

2. 程序仅触发1次输入的原因和修复方案

问题根源

你的代码核心问题是重复修改循环变量i,且校验逻辑顺序错误:

  • for循环本身会在每次迭代结束时自动执行i++,你在输入符合要求的分支里又手动执行了i = i + 1,相当于一次循环i被加了2,会直接跳过后续循环
  • 输入符合要求后你提前加了i,后续while判断的是新下标位置未初始化的垃圾值,直接触发错误校验逻辑,整个流程完全混乱

修复方案

不要手动修改for循环的控制变量i,把校验逻辑改成:固定当前下标i,只要输入不符合要求就循环重输,校验通过后再进入下一轮for循环即可,修复后代码如下:

void demanarDigits(int array[MAX]) {
    // 不需要把i作为参数传入,直接在循环内定义即可
    for (int i = 0; i < 4; i++) {
        printf("Input credit card digit group #%d: ", i + 1);
        scanf("%d", &array[i]);
        // 输入不符合要求就循环重输,直到符合为止
        while (array[i] > 9999 || array[i] < 1000) {
            printf("ERROR: Digit groups must have 4 digits\n\n");
            printf("Input credit card digit group #%d: ", i + 1);
            scanf("%d", &array[i]);
        }
    }
}

额外优化建议

你可以把scanf的返回值也做校验,避免用户输入非数字内容导致程序异常。


内容的提问来源于stack exchange,提问作者Laia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:03