求完善:实现循环输入数字并输出最值的C语言程序
修正你的C语言程序:实现多次输入数字并输出最值
先帮你梳理下原代码里的问题,再给出能正常运行的修正版:
原代码的核心问题
- 变量类型错配:
command用来存"yes"/"no"字符串,不能用float,得用字符数组(比如char command[10];) - scanf传参遗漏地址符:读取数值时必须传变量地址,比如
scanf("%f", &value),你漏了& - 数组未被利用:定义了
int a[100];但从没把输入的数值存进去,后面找最值的逻辑完全无效 - 循环逻辑缺失:你只手动写了一次"yes"的重复输入,应该用循环实现多次输入的逻辑,而不是复制代码
- 未定义变量:
n没有声明,程序不知道要遍历数组的多少个元素 - 头文件缺失:使用
strcmp需要包含<string.h>头文件 - 最值初始化错误:
max和min应该在第一次输入数字后就赋值,直接用a[0]会取到随机垃圾值 - 缓冲区残留问题:输入float后,缓冲区的换行符会被
scanf("%s", command)读取,导致指令读取失败
修正后的完整代码
#include <stdio.h> #include <string.h> int main() { float input_values[100]; // 存储所有输入的数字,最多支持100个 int input_count = 0; // 记录实际输入的数字数量 char user_command[10]; // 存储用户的yes/no指令 float max_val, min_val; // 第一次输入数字并初始化最值 printf("Please enter the value: "); scanf("%f", &input_values[input_count]); input_count++; max_val = input_values[0]; min_val = input_values[0]; // 循环处理后续输入请求 while (1) { // 清空输入缓冲区的残留换行符,避免读取空指令 while (getchar() != '\n'); printf("Do you want to continue? (yes/no): "); scanf("%s", user_command); if (strcmp(user_command, "yes") == 0) { printf("Please enter the value: "); scanf("%f", &input_values[input_count]); // 实时更新最值,不用最后再遍历数组 if (input_values[input_count] > max_val) { max_val = input_values[input_count]; } if (input_values[input_count] < min_val) { min_val = input_values[input_count]; } input_count++; } else if (strcmp(user_command, "no") == 0) { break; // 用户选择退出,跳出循环 } else { printf("Invalid input! Please enter 'yes' or 'no'.\n"); } } // 输出最终结果,用%.2f控制小数位数更美观 printf("The maximum value is %.2f, and the minimum is %.2f\n", max_val, min_val); return 0; }
关键优化点
- 每次输入新数字后直接更新最值,比最后遍历数组效率更高
- 加入缓冲区清理逻辑,解决输入切换时的读取异常
- 增加非法输入提示,提升程序的健壮性
- 用
input_count记录实际输入数量,避免数组空间浪费
内容的提问来源于stack exchange,提问作者Mao
相关产品推荐
相关产品推荐

