2017-02-16 6 views
-3

で働くにはどうすればよい私がやるrandsrand機能の仕組みを理解しようとしています:ランド/にsrand関数はC

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

int main(void) 
{ 
    unsigned int seed; 
    printf("please type in new seed:\n"); 
    scanf("%i", &seed); 
    void srand(unsigned int seed); 
    int rand(void); 
    printf("%i\n", rand); 
    return 0; 
} 

しかし、私のコンパイラは言う:

形式%iは、型の引数を期待intですが、引数2はタイプがint (*)(void) [-Wformat=] printf("%i\n", rand);

ですe?

+4

エラーは 'rand'と' srand'の両方に関係しません... –

+3

あなたは関数と変数を混同しています。 – Barmar

+1

そして、関数を*呼び出す*ときに、関数を宣言するための構文を使用しています。 – Barmar

答えて

4

をあなたには、いくつかの基本的な構文の誤解を持っています。あなたが書くとき:

void srand(unsigned int seed); 
int rand(void); 

ものは機能の宣言あり、それは、関数を呼び出すことはありません。 (必要な場合)、あなたはパラメータを含めると型を返さない、あなただけの()内の引数を入れて関数を呼び出すには:

printf("%d\n", rand()); 

srand(seed); 

次にあなたが結果を印刷しますrandの後の()は、この関数を呼び出すことを意味します。返される値はprintf()に渡されます。あなたがこれを残したので、あなたのコードはそれが返す値ではなく、printf()に関数ポインタ自体を渡そうとしました。

+0

"パラメータ"と "引数"が間違った形で返ってくる:-) –

+0

@KerrekSB私は決して覚えがたいです。 – Barmar

+0

"デフォルト引数"とすれば、信頼できる手掛かりが得られます。または "vaargs - 可変引数"。勝つチームのためにプレーしている場合は、「引数依存ルックアップ」。 –

-2

あなたが代わりに整数の関数を渡す...試してみてください。

printf("%i\n", rand());