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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1726閲覧

C言語 関数がわからない

besic

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/11/16 09:31

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

問題の作成

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

正解か不正解か判断

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

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

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

C言語

1コード 2#include <stdio.h> 3#include <stdlib.h> 4#include <time.h> 5 6int num(e) 7{ 8 int a, b,c,d,e,i; 9 srand(time(NULL)); 10 printf("九九計算\n"); 11 printf("plese push any key\n"); 12 system("pause"); 13 for (i = 1; i <= 9; i++) 14 { 15 //乱数の生成 16 a = rand()% 9+1; 17 b = rand()% 9+1; 18 //回答の生成 19 d = a*b; 20 printf("%d×%dは? :",a,b); 21 scanf("%d", &c); 22 //正解か判断 23 if (c == d) { 24 printf("正解です!\n"); 25 e++; 26 } 27 else { 28 printf("残念ながら不正解です。\n"); 29 printf("答えは%dです。\n",d); 30 } 31 printf("%d回目終了!あと%d回!頑張ろう。\n", i, 10 - i); 32 } 33} 34 35void main() 36{ 37 int a, b,c,d; 38 int e=num(e); 39 srand(time(NULL)); 40 //乱数の生成 41 a = rand()% 9+1; 42 b = rand()% 9+1; 43 //回答の生成 44 d = a*b; 45 printf("%d×%dは? :",a,b); 46 scanf("%d", &c); 47 //正解か判断 48 if (c == d) { 49 printf("正解です!\n"); 50 e++; 51 } 52 else { 53 printf("残念ながら不正解です。\n"); 54 printf("答えは%dです。\n",d); 55 } 56 printf("全問終了!\n"); 57 printf("結果は...%d問正解です!\n",e); 58 }

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

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

C

1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4 5int num(void) 6{ 7 int a, b,c,d,e,i; 8 srand(time(NULL)); 9 printf("九九計算\n"); 10 printf("plese push any key\n"); 11 system("pause"); 12 e = 0; 13 for (i = 1; i <= 10; i++) 14 { 15 //乱数の生成 16 a = rand()% 9+1; 17 b = rand()% 9+1; 18 //回答の生成 19 d = a*b; 20 printf("%d×%dは? :",a,b); 21 scanf("%d", &c); 22 //正解か判断 23 if (c == d) { 24 printf("正解です!\n"); 25 e++; 26 } 27 else { 28 printf("残念ながら不正解です。\n"); 29 printf("答えは%dです。\n",d); 30 } 31 printf("%d回目終了!あと%d回!頑張ろう。\n", i, 10 - i); 32 } 33 return e; 34} 35 36void main() 37{ 38 int e=num(); 39 printf("全問終了!\n"); 40 printf("結果は...%d問正解です!\n",e); 41} 42

投稿2018/11/17 07:40

tatsu99

総合スコア5424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

besic

2018/11/17 09:26

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

0

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

投稿2018/11/16 09:50

編集2018/11/16 10:45
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

besic

2018/11/17 09:28

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問