gpt4 book ai didi

c - 数学给出了从 scanf() 获得的值的错误结果

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:33 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,给定一个函数,它可以在给定四个公里、英里、海里和弗隆的所有四个之间进行转换。我的主要功能如下所示:

int main() {
Scale scale; // declared in the header file "length.h"
double value, kilometers, miles, nautical_miles, furlongs;
// prompt user for unit to convert from
printf("\nPlease select which unit you want to convert from:\n");
printf("1. Kilometers\n2. Miles\n3. Nautical Miles\n4. Furlongs\n");
scanf("%d", &scale);
// Get value user wants
printf("Enter value for unit you selected: ");
scanf("%d", &value);

int err = convertLength(&kilometers, &miles, &nautical_miles, &furlongs, scale);
printf("value given was %d\n", value);
kilometers *= value;
//kilometers *= 2;
//kilometers = kilometers * value;
printf("%g Kilos\n%g miles\n%g naut mi\n%g fur", kilometers, miles, nautical_miles, furlongs);
return 0;
}

转换在文件“length.c”中进行,到目前为止我只调试了公里的情况。 scale 的枚举声明在头文件“length.h”中。

问题是,当我将 main() 中的公里数乘以值时,得到的结果不正确(例如 4.940e-324)。但是,当我只乘以一个常数时,就像注释掉的行//kmilometers *= 2;我会得到正确答案(在这种情况下为 2)。导致它以这种方式运行的变量值出了什么问题?

int convertLength(double *kilometers, double *miles, double *nautical_miles, double *furlongs, Scale scale) {
switch(scale) {
case KILOMETERS:
printf("Kilometers was chosen\n");
*kilometers = 1;
*miles = 1/1.609347219;
*nautical_miles = *miles * 1.15078;
*furlongs = *miles / 8;
break;

最佳答案

更改 scanf() 的说明符,对于 double,它是 "%lf",而不是 "%d",还有

  1. 打开编译器警告以避免此类错误,它应该警告您传递的指针与预期指针之间的不兼容。

  2. 检查 scanf() 的返回值以确保找到您的数据,而不是仅仅假设它是。

关于c - 数学给出了从 scanf() 获得的值的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com