// 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 中的同一程序运行良好,给出了正确的结果。
我已经检查了代码,就功能而言似乎不错。然而,有一个与程序的用户友好性和错误处理相关的小问题。
问题是这样的: 如果用户为“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
}
在 C 中,您可以超出类型可以毫无问题地处理的限制。在您的情况下,如果您的值大于
INT_MAX = 2147483647
,您将得到一个 int 溢出,这可以解释您在输出中获得的大负值。当发生类型溢出时,数字类型将重置为其最小值(-2147483648)等...)。
也许您应该考虑另一种更合适的类型(例如,可以处理十进制值),并通过不允许用户输入大于 INT_MAX 或小于 0 的值(因为它是距离)来管理溢出。