2014-11-17 2 views
0

Этот код отлично компилируется, но когда я его запустил, во втором случае он всегда будет возвращать подсказку, например, ожидая бесконечного количества значений. Я использую Clang в Linux. Мне действительно нужна ваша помощь, поскольку у меня есть экзамен в эту пятницу.Почему моя программа продолжает возвращать приглашение ввода?

#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; 
} 
+1

Можете ли вы объяснить, что вы имеете в виду под «всегда возвращает подсказку»? Пока неясно, что вы имеете в виду. –

+0

уверен, что^-^в основном спрашивает: «Что такое терпимость?» и я вводим номер, затем нажимаю Enter, и он продолжает запрашивать номер в новой строке. –

+0

Какие входные значения вы используете? Возможно, вы можете показать скриншот того, что видите? Во входной части вашего кода нет петель, поэтому неясно, как можно было бы спрашивать не один раз. –

ответ

1

Основываясь на связанный скриншоте, ваша программа не просит для более входных данных. Он вычисляет ответ. В Linux вы все равно можете вводить вещи в терминал во время работы программы, что вы делаете.

Вы можете использовать top или другой монитор ЦП, чтобы увидеть, что ваш процесс использует 100% процессор. Проблема в том, что ваш алгоритм в sen() работает бесконечным циклом и никогда не достигает своего целевого значения допуска.

+0

-_- действительно ?! что?! его всегда мелочи ... в основном я поставил aux после res, когда он должен был быть aux = res ... –

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; 
} 
Смежные вопросы