C语言验证函数从void改为int后printf错误提示重复输出如何解决
问题根因
你在main函数中重复调用了两次verify函数:
- 执行完
input完成数组赋值后,第一次无意义调用了verify(selection),未接收返回值 if判断逻辑中第二次调用verify(selection)获取返回值
非法输入场景下,两次调用都会触发verify内部的错误打印逻辑,自然会输出两次提示文本。
修复方案
删除冗余的第一次verify调用,将校验返回值存入变量复用即可,修改后的main函数代码如下:
int main (void){ int selection[SIZE] = {0}; input(selection); // 仅调用一次verify,返回值存到变量复用 int is_input_valid = verify(selection); if (is_input_valid == 1) { printf("Correct!\n"); } return 0; }
可选优化建议
你当前的verify函数里重复写了两次错误提示文本,还出现了前后空格不一致的小问题,建议把错误提示统一放到校验逻辑末尾输出,代码更简洁易维护:
int verify(int selection[SIZE]){ int para = 1; // 校验数字范围是否合法 for (int i = 0; i < SIZE; i++) { if (selection[i] > 9 || selection[i] < 1) { para = 0; break; } } // 仅范围合法时才校验排序规则 if (para) { for (int i = 0; i < SIZE - 1; i++) { if (selection[i] > selection[i+1]){ para = 0; break; } } } // 校验不通过统一输出一次错误提示 if (!para) { printf("Invalid input: 6 integers 1..9 in sorted order must be supplied.\n"); } return para; }
内容的提问来源于stack exchange,提问作者Eras
相关产品推荐
相关产品推荐

