2017-03-14 9 views
-2

getOption関数のif文でOptionA関数を呼び出そうとしていますが、59行目で "エラーが発生しました"または '(' ''の前に '私は私のコードはOptionA機能に私のラインをプリントアウトするために得ることができるか疑問。ありがとう!一部の関数で問題が発生しました

#include <stdio.h> 
#include <stdlib.h> 

//function declaration 
char getOption (void); 
double OptionA; 

int main(void) 
{ 
    //local declaration 
    getOption(); 

    return 0; 
}//main 

char getOption (void) 
{ 
    //local declaration 
    char option; 

    //statements 
    printf("\nMain Menu\n"); 
    printf(" A. Find the square root of a positive number.\n"); 
    printf(" B. Find the inverse of a positive number.\n"); 
    printf(" Q. Quit.\n\n"); 
    printf("Enter choice:"); 
    scanf(" %c", &option); 
    if (option == 'a' || option == 'A') 
    { 
    OptionA; 
    } 
    else if (option == 'b' || option == 'B') 
    { 
    printf("\nnice"); 
    } 
    else if (option == 'q' || option == 'Q') 
    { 
    exit(0); 
    } 
    else 
    { 
    printf("\nError. Invalid Selection.\n"); 
    getOption(); 
    } 
    return option; 
} 

double OptionA; 
{ 
    printf("\nHey, it works."); 
} 
+1

どこにも 'OptionA'関数はありません。なぜそれが機能だと思いますか? –

+4

Cを学んでいるだけなら、特にインデント*のような書式設定には細心の注意を払ってください。これは可読性にとって非常に重要です。 Cはあなたの過ちに無関心な言葉ですが、それはあなたを厳しく処罰するので、秩序ある体系で物事を維持することが重要です。すべての文字が重要です。あなたがここにある間違いは、コードを正しくインデントすると明らかになります。単に間違っているように見えます。 – tadman

答えて

1

OptionA関数ではありません、それは二重のだ。

double OptionA; 

をCで関数を宣言するには、あなたは() を使用してください:

if (option == 'a' || option == 'A') 
{ 
    OptionA(); 
} 

と機能で:オプション:getOption()関数で

// PROTOTYPE 
double OptionA; 
// this is a double, you'd say : 
double OptionA(); 
// this is a function which returns a double; 

その後、

double OptionA() 
{ 
    printf("\nHey, it works."); 
} 

は、それが私のOptionA関数を呼び出す...

+0

助けてくれてありがとう!それは今働く。 –

0

に役立ちます願っています。 ..

OptionAはあなたがそれを宣言し、それを定義した方法ではありません。任意の関数のための適切な構文は次のとおりです。

return_value FunctionName (argument_data_type argument1, etc...) 

あなたの関数に任意の引数を渡すためにしたくない場合は、あなたが正しい関数名の後の括弧の空のペアを持つことができ、またはキーワードvoidを持つことができます関数名の直後にくる括弧の中に入れます。 ただしの場合は、かっこが必要です。そうしないと、宣言時にコンパイラによって関数名が変数と混同されます(double variableはdouble型の変数なので、double function)。エラーが解剖され

エラー予想識別子または「(」「{」の前に

それは括弧のペアは、関数名と後に必要であることを示しています関数本体の中括弧を開きます

このエラーを修正するには、関数名の直後に関数名がcalleであるコード内のすべての箇所に括弧を追加する必要がありますd、宣言された、または定義されています。

double OptionA; 

へ:

double OptionA(); // the pair of parenthesis is added here 

または:からあなたのプログラムの先頭にあなたの関数の宣言を変更

if (option == 'a' || option == 'A') 
{ 
    OptionA(); // pair of parenthesis added here too 
} 

double OptionA (void); // (void) is the same as() for this purpose. 

はまたにあなたの関数呼び出しを変更

あなたの機能の頭を変えてくださいあなたがそれを定義するときに:

double OptionA() // pair of parenthesis added he right before the function name 
{ 
    printf("\nHey, it works."); 
} 
+0

ありがとう、私は今それを得た! –

+0

実際には、 'OptionA();'と 'double OptionA(void);の間には大きな違いがあります(' BIG、*** BIG ***)。 'OptionA'という関数を宣言し、この関数は 'double'を返します。しかし、空の括弧 '()'バージョンは何も言わない。関数は任意の型の任意の(固定)数の引数を持つことができます。対照的に、塗りつぶされた括弧 '(void)'は、関数のプロトタイプを宣言し、引数をまったく持たないことを指定します。宣言の後、最初に 'double x = OperatorA(1.23、" AAA ");を許可し、2番目の宣言はそうしません。 –

+0

@JonathanLefflerええ、これらのパラメータは、変数名や関数を呼び出すための特定のデータ型が与えられていないため、関数定義内で使用することはできません。したがって、それらは未使用の引数です。 OPの目的のために、両方のメソッドは同じ結果を返します(私は両方を試してテストしました)。 –

関連する問題