C语言新手求助:如何对程序中的输入数值进行有效性验证?
计算机科学入门编程问题解答
问题描述
我在计算机科学入门课程中需要编写程序,通过控制台输入distance(正数且不超过5000英里)和time(正数且不超过5000小时)计算平均速度。目前无法实现输入数值的有效性验证,且程序要求不能使用硬编码值、全局定义或变量。附上现有代码,请求帮助。
现有代码(存在问题)
int main() { const float speed200 = 200.0, speed30 = 30.0, speed5 = 5.0; float uDistance = 0.0, uTime = 0.0, Uspeed = 0.0; printf("\nEnter a distance traveled (positive number not exceeding 5000 miles) "); scanf("%f", &uDistance); printf("\nEnter a time (positive number not exceeding 5000 hours) "); scan("%f", &uTime); uSpeed= uDistance / uTime if(uSpeed > speed200) { printf("The air looking mad airey today"); } else if(uSpeed > speed30); { printf("5 dollars per gallon is a joke!"); } else if(uSpeed > speed5); { printf("Alwyas wear a helmet on your bicycle!"); } else { printf("Look both ways before crossing!"); } return 0; }
现有代码问题分析
- 输入验证缺失:未检查输入的distance和time是否为正数且不超过5000
- 语法错误:
scan应为scanf;uSpeed= uDistance / uTime末尾缺少分号;三个else if语句末尾多了分号,导致分支逻辑完全失效 - 违反题目要求:使用
const定义了硬编码的速度阈值变量,不符合“不能使用硬编码值、全局定义或变量”的要求 - 拼写/格式问题:
Alwyas拼写错误;输出字符串未添加换行符,显示不规范
修正后的代码
#include <stdio.h> int main() { float uDistance, uTime, uSpeed; // 验证并获取合法的distance输入 do { printf("Enter a distance traveled (positive number not exceeding 5000 miles): "); scanf("%f", &uDistance); if (uDistance <= 0.0 || uDistance > 5000.0) { printf("Invalid input! Please enter a value between 0 and 5000.\n"); } } while (uDistance <= 0.0 || uDistance > 5000.0); // 验证并获取合法的time输入 do { printf("Enter a time (positive number not exceeding 5000 hours): "); scanf("%f", &uTime); if (uTime <= 0.0 || uTime > 5000.0) { printf("Invalid input! Please enter a value between 0 and 5000.\n"); } } while (uTime <= 0.0 || uTime > 5000.0); // 计算平均速度 uSpeed = uDistance / uTime; // 根据速度输出提示(直接使用数值,无硬编码变量) if (uSpeed > 200.0) { printf("The air looking mad airey today\n"); } else if (uSpeed > 30.0) { printf("5 dollars per gallon is a joke!\n"); } else if (uSpeed > 5.0) { printf("Always wear a helmet on your bicycle!\n"); } else { printf("Look both ways before crossing!\n"); } return 0; }
改动说明
- 输入验证:使用
do-while循环强制用户输入符合要求的数值,直到输入合法为止 - 符合题目要求:移除所有硬编码变量,直接在条件判断中使用数值,避免全局定义或额外变量
- 语法修正:修复了
scanf拼写错误、补充分号、移除else if后的多余分号 - 细节优化:修正拼写错误,为输出字符串添加换行符,提升显示可读性
内容的提问来源于stack exchange,提问作者Brazen General
相关产品推荐
相关产品推荐

