Проблема с компилятором Turbo C, функция sqrt () не работает с переменными аргументами - PullRequest
3 голосов
/ 29 января 2012

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

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;
    }

Вывод такой:

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

64

а = 0,000000

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

Ответы [ 3 ]

4 голосов
/ 29 января 2012

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

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

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

2 голосов
/ 29 января 2012

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

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

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

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

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

2 голосов
/ 29 января 2012

Попробуйте:

   scanf("%lf",&a);

или измените переменную a на float:

 float a;
...