gpt4 book ai didi

c - 为什么我需要在此处对所有值进行类型转换?

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

我正在用 C 语言编写一个非常基础的程序(刚接触 C 语言,所以只是掌握一些东西)并且我正在努力使用 TypeCasting。

这是一个简单的计算程序,允许您输入两个数字并决定要对它们执行的操作(加、减、除和乘)。显然,并非所有数字都可以被所有其他数字整除,因此在除法部分的 switch 语句中,我试图将 int 类型转换为 float。

根据要求,我的变量声明在这里:

    int inputOne, inputTwo, calculatedValue = 0;
char calcType;
char restart = 'n';

我已经通过对所有值进行类型转换来实现它的工作,但这是我之前尝试过的:

        case 'd': case 'D':
calculatedValue = inputOne / inputTwo;
printf("%s%d%s%d%s%1.2f", "The value of ", inputOne, " divided by ", inputTwo, " is equal to ", (float)calculatedValue);
printf("\nPlease note: This is only accurate to two decimal places.");
break;

这只返回 4,没有任何小数位。然后我想可能是因为计算仍然是int,所以我把它改成这样:

        case 'd': case 'D':
(float)calculatedValue = inputOne / inputTwo;
printf("%s%d%s%d%s%1.2f", "The value of ", inputOne, " divided by ", inputTwo, " is equal to ", (float)calculatedValue);
printf("\nPlease note: This is only accurate to two decimal places.");
break;

但这只会返回 1082130432.00。不知道这个数字是从哪里来的。

我用这个解决了这个问题:

        case 'd': case 'D':
printf("%s%d%s%d%s%1.2f", "The value of ", inputOne, " divided by ", inputTwo, " is equal to ", (float)calculatedValue = (float)inputOne / (float)inputTwo);
printf("\nPlease note: This is only accurate to two decimal places.");
break;

因为它在 switch 语句中,我本可以通过使用 float 而不是原始整数来解决问题,但我编写这段代码是为了尝试更好地理解类型转换,并且我的印象是它可以在没有必须对所有内容进行类型转换。任何人都可以发光吗?我的讲师在 printf 中使用了类型转换,效果很好。在他的示例中,他试图找到学生的平均年龄,他这样做是这样的:

printf("\nAverage age: %1.2f", (cAge1 + cAge2 + cAge3) / (float)cNumStudents);

希望这是有道理的,对于一个简单的问题这么长,我感到很抱歉,我只是想理解为什么我必须对所有内容进行类型转换(正如我的讲师所说,您只需要将其转换为一个值)。

干杯

编辑:

我刚刚尝试了以下但它返回 0.00,而不是答案。

calculatedValue = (float)inputOne / inputTwo;
printf("%s%d%s%d%s%1.2f", "The value of ", inputOne, " divided by ", inputTwo, " is equal to ", calculatedValue);
printf("\nPlease note: This is only accurate to two decimal places.");
break;

最佳答案

你的问题是 split 本身。

将两个 int 相除产生另一个 int。因为它是 int,所以不可能有小数。

int 转换为 float 无法神奇地重新引入它从未有过的小数。

您需要将其中一个操作数转换为float,这样除法本身就不会产生int。您不需要任何其他强制转换。

关于c - 为什么我需要在此处对所有值进行类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46472971/

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