2012-05-08 22 views
1

ここではC言語を学習していますが、関数プロトタイプの使い方はかなり混乱しています。C関数プロトタイプ

私は主にmainに関数を呼び出す際に問題が発生しています。私はここに何かがあると確信しています。なぜなら、これはメモリ内のものを印刷するからです。

ありがとうございました。

#include <stdio.h> 


double source_volt(double vs); 


int main() 
{ 
    double source_volt(double vs); 
    double vs; 
    printf("%lf", vs); 
    return 0; 
} 


double source_volt(double vs) 
{ 

    int valid = 0; 
    do 
    { 
     printf("Enter source voltage Vs in volts: "); 
     scanf("%lf", &vs); 

     if (vs < 0 || vs > 100) 
     { 
      valid = 0; 
      printf("Please enter a number between 0 and 100.\n"); 
     } 
     else 
      valid = 1; 
    }while(!valid); 
    return vs; 
} 
+1

「関数宣言」、「関数定義」、「関数を呼び出す方法」などに関する教科書を読んでいます。関数の基本的な理解が不足しているように見えるので、この質問にはうまくいきません。 –

+0

なぜ 'source_volt'は値によってパラメータを渡されますか?私は代わりにそれのアドレスを渡し、関数が型voidを返すようにしたいと思います。 – Mahesh

答えて

3

これはあなたのために働いていないものです。

代わり
int main() 
{ 
    double source_volt(double vs); //You already declared the function, 
            //you dont need the doubles 
    double vs; 
    printf("%lf", vs); 
    return 0; 
} 

int main() 
{ 
    double vs; 
    vs = double source_volt(vs); //The double keyword is gone 
    printf("%lf", vs); 
    return 0; 
} 

しかし、実際には、ソースボルトにまったく引数を必要としません。

あなたは書き換えることができ機能に

double source_volt(void) 
{ 
    double vs; 
    int valid = 0; 
    do 
    { 
     printf("Enter source voltage Vs in volts: "); 
     scanf("%lf", &vs); 

     if (vs < 0 || vs > 100) 
     { 
      valid = 0; 
      printf("Please enter a number between 0 and 100.\n"); 
     } 
     else 
      valid = 1; 
    }while(!valid); 
    return vs; 
} 
2

メインdouble source_volt(double vs);内側の線が実際に機能を再宣言します。メインのvsが初期化せずに使用されています。それが定義されていますよう

機能source_voltはそうのように呼ばれることになります。

double vs; 
vs = source_volt(vs); 

しかし、私はまた、あなたがカントー関数にdoubleを渡すことによって何かを得ていないことを指摘したいと思います。 source_voltにローカル変数を宣言して同じ結果を得ることができます。

関連する問題