【发布时间】:2011-05-09 04:50:59
【问题描述】:
我正在尝试计算一个数字的指数。当我以 int 执行所有操作时,我得到正确的结果,但输出必须是浮点数,当我尝试在 printf() 中使用 %f 进行转换时,我得到 0,当我使用 %d 时,我得到正确的结果。我无法更改程序的 main() 部分,我只能更改 *powerArgs() 函数。程序输入为3、5。
完全公开,这是学校作业的一部分。我不是要完整的代码。我将不胜感激一个更一般的答案,告诉我我忘记了什么,可能我应该更多地研究哪些领域来自己找到答案。
#include <stdio.h>
#include <stdlib.h>
int *powerArgs(int *pA, int *pB);
/* MAIN */
int main(int argc, char **argv)
{
if (argc != 3)
{
printf("?Invalid number of arguments\n");
system("pause");
exit(1);
}
int parmA = atoi(argv[1]);
int parmB = atoi(argv[2]);
int idx;
/* Part C: Raise parmA to the power of parmB. Return pointer to the result */
/* Reset the original values after we print the result */
printf("%d raised to the %d power is %0.1f\n", parmA, parmB, *powerArgs(&parmA, &parmB));
printf("\n");
system("pause");
exit(0);
}
int *powerArgs(int *pA, int *pB)
{
int idx, result = *pA;
for (idx = 1; idx < *pB; idx++)
{
result *= *pA;
}
return &result;
}
【问题讨论】:
-
不,不,不。您不能将 指针 从
powerArgs返回到result。result是该函数中的 局部变量。一旦函数退出,它就不存在了。您必须返回一个 int(或 float)value. -
我实际上有不同的评论:即使在作业中,也不要命名任何 parmA、parmB 或其变体。相反,将变量命名为基数和指数。以后阅读您的代码的人(包括您在内)会发现,如果他们不必继续查看 parmA 是基数还是指数,并看到您在某些时候没有交换它们,那么阅读起来会容易得多。
-
我没有用 parmA 和 parmB 写部分。 main()部分是老师给的,我们必须编写被调用的函数来返回预期的结果输出如show。这就是为什么我不能只输出为 int。但我很欣赏这一点,我通常有更具描述性的变量名称,例如 interation、base、product。
-
当今编程设计中最大的问题之一是糟糕的接口。这是一个伟大的例子。绝对没有理由(不,甚至没有性能)将引用或指针作为输入,更糟糕的是,返回一个指针。它所做的只是使代码比它需要的更复杂。错误隐藏在复杂性中。
-
@mcabral: "The homework tag...is now discouraged," 但是,@cyotee,请(一如既往)遵循general guidelines:说明任何特殊限制,展示您迄今为止尝试过的内容,并询问具体是什么令人困惑你。 (你在这里做得很好。)
标签: c type-conversion printf