C中的条件逻辑

时间:2013-01-28 23:34:30

标签: c if-statement

我正在为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

我希望它只是“错误”。我希望我的问题有道理。谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

如果出现错误,您可以让程序死掉:

if (alpha <= 0)
{ 
    printf("error\n");
    exit(EXIT_FAILURE);
}

这样函数永远不会返回,你根本不会调用最终的print语句。

否则请注意pareto没有方法向调用者发出错误信号!如果您想在错误后继续执行,则必须重新设计您的函数以允许发生错误状态并进行通信。


由于您是新手:请注意您的代码可以缩短很短,因为在elsereturn之后您不需要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;
}