【发布时间】:2017-09-28 15:27:38
【问题描述】:
我正在用 C 编写一个非常基本的程序(C 新手,所以只是掌握了一些东西)并且我正在努力使用 TypeCasting。
这是一个简单的计算程序,可让您输入两个数字并决定要对它们做什么(加、减、除和乘)。显然,并非所有数字都可以被所有其他数字整除,因此在我的除法部分的 switch 语句中,我试图将 int 类型转换为浮点数。
根据要求,我的变量声明在这里:
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 语句中,所以我可以通过使用浮点数而不是原始整数来解决问题,但是我已经完成了这段代码来尝试更好地理解类型转换,并且认为它可以在没有的情况下工作必须对所有内容进行类型转换。任何人都可以发光吗?我的讲师在 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;
【问题讨论】:
-
不是答案,但请注意
(float)something = something是not valid in the standard C。 -
缺少变量声明。请出示minimal reproducible example。您确定
inputOne和inputTwo包含您期望的值吗? -
答案完全取决于
inputOne和inputTwo的声明方式。他们是int,还是double,还是什么? -
作为一般规则(尤其是如果您不确定自己在做什么),您应该避免大多数类型转换,因为它们通常不是解决问题的正确方法,而且它们可以往往使事情变得更糟,或隐藏真正的问题。但是(作为该一般规则的一个例外),如果您有两个
int变量,并且您想将它们相除以产生浮点结果,您肯定需要将其中至少一个转换为(double)(或者可能是(float))。 -
如果
calculatedValue是一个 int,您可以不使用%1.2f打印它。
标签: c