VS 代码中的 C 乘法

问题描述 投票:0回答:2
// Program to convert Kilometers into Meters, Centimeters and Millimeters
#include <stdio.h>
int main()
{
    int dis_km, dis_m, dis_cm, dis_mm;
    printf("Enter distance in Kilometers... \n");
    scanf("%d", &dis_km);

    // Converting Km into other units
    dis_m = dis_km * 1000;
    dis_cm = dis_km * 100000;
    dis_mm = dis_km * 1000000;

    printf("The distance in meters is %d \n", dis_m);
    printf("The distance in centimeters is %d \n", dis_cm);
    printf("The distance in millimeters is %d \n", dis_mm);
    
    return 0;
}

输出:

The distance in meters is -1444151296
The distance in centimeters is 1613758464
The distance in millimeters is -1042284544

我不知道为什么乘法会给出这些结果。但 Replit 中的同一程序运行良好,给出了正确的结果。

c visual-studio-code mingw
2个回答
0
投票

我已经检查了代码,就功能而言似乎不错。然而,有一个与程序的用户友好性和错误处理相关的小问题。

问题是这样的: 如果用户为“dis_km”输入非整数值或负数,程序可能会产生意外结果。验证用户输入以确保它是正整数是一个很好的做法。

你可以直接说:

  if (scanf("%d", &dis_km) != 1 || dis_km < 0) {
        printf("Invalid input. Please enter a positive integer for distance in kilometers.\n");
        return 1; // Exit the program with an error code
    }

0
投票

在 C 中,您可以超出类型可以毫无问题地处理的限制。在您的情况下,如果您的值大于

INT_MAX = 2147483647
,您将得到一个 int 溢出,这可以解释您在输出中获得的大负值。当发生类型溢出时,数字类型将重置为其最小值(-2147483648)等...)。

也许您应该考虑另一种更合适的类型(例如,可以处理十进制值),并通过不允许用户输入大于 INT_MAX 或小于 0 的值(因为它是距离)来管理溢出。

© www.soinside.com 2019 - 2024. All rights reserved.