2012-01-29 2 views
3

J'ai recherché la question similaire à mon problème Similar problem. Mais mon problème est lors de l'utilisation de Turbo C compilateur v3.0. Devrais-je faire un travail supplémentaire pour le fichier math.h? aidez s'il vous plaît.Problème du compilateur Turbo C, la fonction sqrt() ne fonctionnait pas avec les arguments variables

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

La sortie est comme ceci:

Entrez un # pour la racine carrée.

a = 0,000000

a = 0,000000 et la racine carrée est 0,000000

Répondre

4

Pour scanf(), %f est pour float. Vous devez utiliser %lf pour double:

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

Ceci est en contraste à printf() où le type de promotion permet %f à utiliser pour les float et double.

+0

Ok quand j'ai utilisé le type de données float au lieu de double comme suggéré par @Emil Dumbazu, cela fonctionne bien. Pouvez-vous s'il vous plaît expliquer pourquoi. Merci – AbdulAziz

+0

Cela fonctionne sur ma machine avec juste ce changement. Pouvez-vous élaborer sur ce qui ne va pas maintenant? – Mysticial

+0

C'est le même problème. Je veux dire que ça m'a donné le même résultat avant. Mais quand j'ai changé le type de données, cela fonctionne très bien. – AbdulAziz

2

Essayez ceci:

scanf("%lf",&a); 

ou modifier la variable a flotter:

float a; 
+0

Merci pour le conseil, la première option n'a pas fonctionné, mais j'ai utilisé le second "float a", ça marche bien – AbdulAziz

2

En plus d'utiliser "%lf" comme format scanf, vous devez avoir

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

Le dernier est pour les appels clrscr() et getch(); ils sont non standard, mais je pense ils sont déclarés dans <conio.h>.

Sans le #include <math.h>, le compilateur va supposer que sqrt() retourne un résultat int plutôt que double.

(aparté: Pourquoi appelez-vous clrscr() Quel est l'avantage de dégager l'écran avant de faire quoi que ce soit d'autre l'une ou l'autre appel ne soit pas strictement getch() nécessaire, mais sur certains systèmes, la méthode par défaut de l'exécution d'un programme donne lieu à? la fenêtre étant fermée dès qu'elle se termine.)

+0

Merci pour votre explication .Oui vous avez raison, je comprend tout ce que vous avez mentionné. J'inclus également math.h mais toujours le même résultat. J'utilise clrscr() généralement pour être exécuté ou obtenir une sortie sur un écran propre. Y a-t-il un inconvénient pour clrscr()? Pour getch(), le programme se ferme dès qu'il se termine, donc j'utilise getch(). – AbdulAziz

+0

@AbdulAziz: C'est une mauvaise forme. Pouvez-vous imaginer si chaque fois que vous avez exécuté, dir, 'dir',' copy', 'move', ou' ren', le système a d'abord effacé l'écran? En outre, si "programme se ferme dès qu'il se termine", vous voulez dire que la fenêtre * est fermée dès qu'elle se termine, puis exécutez-la via une fenêtre d'invite de commande au lieu de double-cliquer sur un fichier .exe. – jamesdlin

+0

@Keith Merci pour vos conseils, mais j'utilise Turbo C v3.0. Donc je dois accéder avec la commande 'RUN'. – AbdulAziz

Questions connexes