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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:05:34