2012-01-29 13 views
3

Я искал вопрос, похожий на мою проблему Similar problem. Но моя проблема заключается в использовании Turbo C компилятора v3.0. Должен ли я сделать некоторую дополнительную работу для файла math.h? пожалуйста помоги.Проблема с компилятором Turbo C, функция sqrt() не работает с переменными аргументами

int main (void){ 
    double result, a; 
    clrscr(); 
    printf("Enter a # for square root.\n"); 
    scanf("%f",&a); 
    printf("a = %f\n",a); 
    result = sqrt(a); 
    printf("a = %f and square root is %f\n",a, result); 
    getch(); 
    return 0; 
    } 

Выход таков:

Введите # для квадратного корня.

а = 0,000000

а = 0,000000 и квадратный корень 0,000000

ответ

4

Для scanf(), %f для float. Вы должны использовать %lf для double:

printf("Enter a # for square root.\n"); 
scanf("%lf",&a); 

Это в отличие от printf(), где тип-продвижение позволяет %f быть использованы как для float и double.

+0

Хорошо, когда я использовал тип данных float вместо double как предложил @Emil Dumbazu, он отлично работает. Не могли бы вы объяснить, почему. Спасибо – AbdulAziz

+0

Он работает на моей машине только с этим изменением. Можете ли вы подробнее рассказать о том, что случилось сейчас? – Mysticial

+0

Его та же проблема. Я имею в виду, что это дало мне тот же результат раньше. Но когда я изменил тип данных, он работает нормально. – AbdulAziz

2

Попробуйте это:

scanf("%lf",&a); 

или изменить переменную а к поплавок:

float a; 
+0

Спасибо за подсказку, первый вариант не сработал, но я использовал второй «float a», он отлично работает – AbdulAziz

2

В дополнение к использованию "%lf" в качестве формата scanf, вам нужно иметь

#include <stdio.h> 
#include <math.h> 
#include <conio.h> /* I think */ 

Последняя является для clrscr() и getch() вызовов; они нестандартные, но я думаю они объявлены в <conio.h>.

Без #include <math.h>, компилятор будет считать, что sqrt() возвращает int результат, а не double.

(В сторону: почему вы вызываете clrscr()? В чем преимущество очистки экрана перед выполнением чего-либо еще? Вызов getch() также не является обязательным, но в некоторых системах метод запуска программы по умолчанию окно закрывается, как только оно завершается.)

+0

Спасибо за ваше объяснение. Да, вы правы, я включаю все, что вы упомянули. Я также включаю math.h, но все тот же результат. Обычно я использую clrscr() для запуска или получения вывода на чистом экране. Есть ли недостаток для clrscr()? Для getch() программа закрывается, как только она завершается, поэтому я использую getch(). – AbdulAziz

+0

@AbdulAziz: Это плохая форма. Можете ли вы представить, если каждый раз, когда вы бежите, скажем, 'dir',' copy', 'move' или' ren', система сначала очистила экран? Кроме того, если «программа закроется, как только она завершается», вы имеете в виду, что * окно * закрывается, как только оно завершается, а затем запускайте его через окно командной строки вместо двойного щелчка на каком-либо файле .exe. – jamesdlin

+0

@ Keith Спасибо за руководство, но я использую Turbo C v3.0. Поэтому мне нужно получить доступ с помощью команды «RUN». – AbdulAziz