質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

C言語 関数がわからない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 971

besic

score 14

今、初めて1週間ほどのC言語初心者ですが、
九九の計算ゲームのようなものを作っています。
イメージとしては、
ランダムに1~9の整数を生成

問題の作成

キーボードから回答を入力

正解か不正解か判断

正解であれば"正解です"
不正解であれば"不正解です。"
さらに残り回数を表示する

10回終わったら正解数を表示する

というのを作りたいんですが、関数などの使い方がわからず
思った動きをしないプログラムになってしまいました。

コード
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int num(e)
{
    int a, b,c,d,e,i;
    srand(time(NULL));
    printf("九九計算\n");
    printf("plese push any key\n");
    system("pause");
    for (i = 1; i <= 9; i++)
    {
        //乱数の生成
        a = rand()% 9+1;
        b = rand()% 9+1;
        //回答の生成
        d = a*b;
        printf("%d×%dは? :",a,b);
        scanf("%d", &c);
        //正解か判断
        if (c == d) {
            printf("正解です!\n");
            e++;
        }
        else {
            printf("残念ながら不正解です。\n");
            printf("答えは%dです。\n",d);
        }
        printf("%d回目終了!あと%d回!頑張ろう。\n", i, 10 - i);
    }
}

void main()
{
        int a, b,c,d;
        int e=num(e);
        srand(time(NULL));
        //乱数の生成
        a = rand()% 9+1;
        b = rand()% 9+1;
        //回答の生成
        d = a*b;
        printf("%d×%dは? :",a,b);
        scanf("%d", &c);
        //正解か判断
        if (c == d) {
            printf("正解です!\n");
            e++;
        }
        else {
            printf("残念ながら不正解です。\n");
            printf("答えは%dです。\n",d);
        }
        printf("全問終了!\n");
        printf("結果は...%d問正解です!\n",e);
        }


どこがいけないんでしょうか?
どうか教えてください。
また関数もうまく使えないので、
分かりやすいサイトなども教えてください。

長文になりましたが、よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

基本的にnum側でほとんどの機能を実現しているので、main側は、正解数のみを表示するだけにします。
num()は、正解した回数を返します。引数はとらないので、引数は渡しません。以下のようになります。

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

int num(void)
{
    int a, b,c,d,e,i;
    srand(time(NULL));
    printf("九九計算\n");
    printf("plese push any key\n");
    system("pause");
    e = 0;
    for (i = 1; i <= 10; i++)
    {
        //乱数の生成
        a = rand()% 9+1;
        b = rand()% 9+1;
        //回答の生成
        d = a*b;
        printf("%d×%dは? :",a,b);
        scanf("%d", &c);
        //正解か判断
        if (c == d) {
            printf("正解です!\n");
            e++;
        }
        else {
            printf("残念ながら不正解です。\n");
            printf("答えは%dです。\n",d);
        }
        printf("%d回目終了!あと%d回!頑張ろう。\n", i, 10 - i);
    }
    return e;
}

void main()
{
        int e=num();
        printf("全問終了!\n");
        printf("結果は...%d問正解です!\n",e);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/17 18:26

    ありがとうございます!
    コードの例をいただいたのでこちらをベストアンサーにさせていただきます。

    キャンセル

0

srand()は、最初に一度だけでいいです。
で、機能分けをしましょう。
1.問題の生成・表示
2.回答の入力・判定
3.正解・不正解の表示
上記の内、mian()でする処理、関数でする処理を考えます。
main()からは、正解をパラメータで渡す。関数側では、10回NGとなるか正解が出た時点で結果(OKかNG)をmain()に返して判定(表示する)します。
ソースを見ると重複する処理が散見されます注意しましょう。
「追記」
失礼、正解が出るまでリトライじゃなかった^^;
であれば、main()側での乱数生成・問題提示は不要、もしくは関数側で一問だけの処理にするか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/17 18:28

    関数の仕組みについて考えてくださって
    ありがとうございます!
    参考にさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る