为什么我的程序会一直返回输入提示?

时间:2014-11-17 19:08:08

标签: c linux clang prompt

这段代码完美编译,但是当我运行它时,在第二个'scanf'上它将始终返回提示,就像它期望无限量的值一样。我在Linux上使用Clang。我本周五参加考试时真的需要你的帮助。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int fatorial(int n){
    int f=1, t;
    for(t=n;t>1;t--){
        f=f*t;
    }
    return f;
}

float sen(float x, float tol){
    float res=0, aux=0;
    int n=0;
    for(n=1;res-aux!=tol||aux-res!=tol; n++){
        res=aux;
        res=res+(pow(-1,n+1))*((pow(x,2*n-1))/fatorial(2*n-1));
    }
    return res;
}
int main(){
    float yo, tol, res;
    printf("What's the value of x? ");
    scanf(" %f", &yo);
    printf("What's the tolerance? ");
    scanf(" %f", &tol);
    res=sen(yo, tol);
    printf("The sin of %.2f is %f.\n", yo, res);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

根据您的链接屏幕截图,您的程序不会询问以获取更多输入。它正在计算答案。在Linux中,您仍然可以在程序运行时将内容输入终端,这就是您正在做的事情。

您可以使用top或其他CPU监视器来查看您的进程使用的是100%CPU。问题是sen()中的算法正在运行无限循环,并且永远不会达到其目标容差值。

答案 1 :(得分:0)

试试这个

float sen(float x, float tol){
    float res=0, aux=tol+1;
    int n;
    for(n=0;fabsf(res-aux)>tol; n++){
        aux=res;
        res=res+pow(-1, n)*pow(x, 2*n+1)/fatorial(2*n+1);
    }
    return res;
}