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
相关产品推荐
相关产品推荐

