我正在为stats类做一个任务,而且我是编程新手。我不想问一个愚蠢的问题,但我已经搜索过,找不到答案。
这是我的代码:
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
double pareto(double x, double alpha, double beta)
{
double val = beta * pow(alpha, beta) / pow(x, beta+1);
if( alpha <= 0 ) printf("error");
else if( beta <= 0 ) printf("error");
else if( alpha >= x) return(0);
else return(val);
}
int main()
{
double x;
double alpha;
double beta;
scanf("%lf", &x);
scanf("%lf", &alpha);
scanf("%lf", &beta);
printf("%f\n", pareto(x,alpha,beta));
return 0;
}
当我按如下方式测试代码时:
echo 3 -2 1 | ./paretodens
我得到了输出:
error0.000000
我希望它只是“错误”。我希望我的问题有道理。谢谢你的帮助。
答案 0 :(得分:4)
如果出现错误,您可以让程序死掉:
if (alpha <= 0)
{
printf("error\n");
exit(EXIT_FAILURE);
}
这样函数永远不会返回,你根本不会调用最终的print语句。
否则请注意pareto
没有方法向调用者发出错误信号!如果您想在错误后继续执行,则必须重新设计您的函数以允许发生错误状态并进行通信。
由于您是新手:请注意您的代码可以缩短很短,因为在else
或return
之后您不需要exit
:
double pareto(double x, double alpha, double beta)
{
if (alpha <= 0 || beta <= 0) { printf("Error\n"); exit(EXIT_FAILURE); }
return alpha >= 0 ? 0 : beta * pow(alpha, beta) / pow(x, beta + 1);
}
请注意,除非您知道自己需要,否则无需执行计算!
答案 1 :(得分:1)
这总是被执行:
printf("%f\n", pareto(x,alpha,beta));
你根本没有条件。此外,您的pareto()函数有时会返回没有指定的值。你应该修复它并使它总是返回一些特定的值。
答案 2 :(得分:0)
如果我理解正确,您希望打印“错误”或函数中的正确返回值,但不能同时打印两者。问题是您在调用pareto
时调用printf
函数。 pareto
函数本身调用了printf,这就是为什么你的代码同时打印'error'和返回值。
就个人而言,我会按照以下方式清理它:
double pareto(double x, double alpha, double beta)
{
if (alpha <= 0 || beta <= 0)
return -1;
if (alpha >= x)
return 0;
return beta*pow(alpha,beta)/pow(x,beta+1);
}
int main()
{
double x;
double alpha;
double beta;
double val;
scanf("%lf", &x);
scanf("%lf", &alpha);
scanf("%lf", &beta);
val = pareto(x,alpha,beta);
if (val < 0)
printf("error");
else
printf("%f\n", val);
return 0;
}