ページ 11

C言語エラーについて

Posted: 2009年11月27日(金) 19:34
by P
あるプログラムをコンパイルしていたところエラーが出たのですがエラーの意味がよくわからないので質問させていただきます。

そのプログラムの仕様は
・サイコロを振って目の大きいほうが勝ち(相手はコンピュータ)
・勝敗を記録(何勝何敗)
・eと打つと終了。エンターを押すと勝負。

・関数を使う。(サイコロの出た目、勝敗判定、勝敗記録)

というものですが勝敗記録の関数のところで
「関数定義情報(またはプロトタイプ情報)より、関数が少ないです。」
というエラーがでます。

実際の関数の部分は

int syouhai(int x,int y)
{
printf("あなたの勝ち:%d 私の勝ち:%d\n",x,y);
}

というものです。
何かが足りない、とは思っているのですがそれが何なのか見当もつかない状態です。
よろしければご指導お願いします。

Re:C言語エラーについて

Posted: 2009年11月27日(金) 20:00
by 初級者
その関数を呼び出しているところを見せてください。

Re:C言語エラーについて

Posted: 2009年11月27日(金) 20:45
by conio
----------------------------------------------------
int syouhai(int x,int y) 
{ 
    printf("あなたの勝ち:%d 私の勝ち:%d\n",x,y); 
}
----------------------------------------------------
↑return文が無いですね。



return文で、int型の値を返すようにするか、
もしくはvoidにして戻り値を無くすべき だと思います。
----------------------------------------------------
int syouhai(int x,int y) 
{ 
    printf("あなたの勝ち:%d 私の勝ち:%d\n",x,y); 
    return(0); //適当に0を指定
}
----------------------------------------------------

----------------------------------------------------
void syouhai(int x,int y) 
{ 
    printf("あなたの勝ち:%d 私の勝ち:%d\n",x,y); 
}
----------------------------------------------------

Re:C言語エラーについて

Posted: 2009年11月27日(金) 21:54
by P
お返事ありがとうございます。
今回私が書いたプログラムです。

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

int saikoro(void)/*サイコロを振っています*/
{
    int n;
    n=(int)(rand()/(RAND_MAX+1.0)*6.0);
    ++n;
    printf("%d",n);
}

int hantei(int x,int y)/*判定をしています*/
{
    int jg;
    if(x>y)
    {
        jg=1;
    }
}

void syouhai(int x,int y)/*勝敗記録の表示です*/
{
    printf("あなたの勝ち:%d 私の勝ち:%d\n",x,y);
}
void main(void)
{
    int player;
    int com;
    int jg;
    int x=0;
    int y=0;
    while(getchar()!='e')/*「e」と入力するまでループ*/
    {
        player=saikoro();
        com=saikoro();
        printf("私:%d あなた:%d\n",com,player);
        jg=hantei(player,com);
        if(jg==1)
        {
            printf("あなたの勝ちです\n");
            ++x;
        }
        else
        {
            printf("私の勝ちです\n");
            ++y;
        }
        syouhai(jg);
    }
}

conioさんが言われたとおりvoid文にしてみましたが同じエラーが出るだけでした。
ご指導お願いします。

Re:C言語エラーについて

Posted: 2009年11月27日(金) 22:09
by ぬんぬん
関数int saikoroとint hanteiも値を返す(return文をつける)必要があります。
conioさんの解説をみながら修正してみてください。

Re:C言語エラーについて

Posted: 2009年11月27日(金) 22:10
by conio
とりあえず、main関数は
int main(void) の形にしておいた方が良いです。


>>conioさんが言われたとおりvoid文にしてみましたが同じエラーが出るだけでした。
全て直ってません。

hantei関数は、"int型の値を返す"と指定しているのにreturn文が無いですし、
saikoro関数も同じく、return文がありません。


一度、関数の引数とは何か、戻り値とは何か、を
把握しなおしてみた方が良いのではないのでしょうか。

Re:C言語エラーについて

Posted: 2009年11月27日(金) 22:23
by softya
とりあえず、ここを読んでみてください。
http://www.geocities.jp/ky_webid/c/008.html
苦Cの11章関数の作り方も見てみてくださいね。
http://homepage3.nifty.com/mmgames/c_guide/

Re:C言語エラーについて

Posted: 2009年11月27日(金) 22:39
by P
ありがとうございます。
難しいですね。自分の理解力が低いだけかもしれませんが・・・

解決はしていませんがもう一度最初からやってみることにします。
貴重な時間を使っていただきありがとうございました。

また何かあればお世話になるかもしれませんがよろしくお願いします。