ページ 1 / 1
HELP
Posted: 2015年11月27日(金) 21:46
by ryo
コード:
//***********************************
//**********マクロ定義**********
//**********************************
#define _CRT_SECURE_NO_WARNINGS
#define FILENAME_QUESTION "question.txt"//問題
#define FILENAME_RESULT "result.txt"//結果出力
#define MAX_QUESTION (10)//クイズ最大
#define SELECT_ANSWER (4)//選択数
#include<stdio.h>
#include <stdlib.h>
//**********構造体定義**********
typedef struct{
char aQuestion[256];//問題
char aSelect[SELECT_ANSWER][256];//解答群
int nAnswer;//解答
}QUIZ_INFO;
//***********プロトタイプ宣言**********
void Opening(void);//オープニングタイトル
void Input_Question(void);//問題ファイルの読み込み
void Question(void);//解答
void OutputResult(void);//結果ファイル出力
//**********グローバル変数定義**********
QUIZ_INFO quizInfo[MAX_QUESTION];
int nAnswer[MAX_QUESTION];
int main(void)
{
Opening();
Input_Question();
Question();
OutputResult();
getchar();
return 0;
}
void Opening(void)
{
printf("クイズゲーム\n");
}
void Input_Question(void)
{
int cntQuestion;
FILE *fp;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
fp = fopen(FILENAME_QUESTION, "rt");
if (fp == NULL)
{
printf("ファイルオープンエラー。");
exit(-1);
}
for (cntQuestion = 0; cntQuestion < MAX_QUESTION; cntQuestion++)
{
fscanf(fp, "%s", pQuiz->aQuestion);
for (cntQuestion = 0; cntQuestion < SELECT_ANSWER; cntQuestion++)
{
fscanf(fp, "%s", pQuiz->aSelect);
}
fscanf(fp, "%d", &pQuiz->nAnswer);
pQuiz++;
}
fclose(fp);
}
void Question(void)
{
void OutputResult(void)
{
}
問題を読む→出題する→回答入力→判定という感じに
したいのですがわからないのでソースを教えてほしいです
お願いします。
Re: HELP
Posted: 2015年11月28日(土) 00:07
by 超初級者
動作の例を挙げてみてください。
Re: HELP
Posted: 2015年11月28日(土) 00:49
by ryo
*********クイズゲーム*************
問題1 来年のオリンピックの開催地は?
1.ロンドン 2.リオデジャネイロ 3.北京 4.シドニー
答え入力 2
問題を入力したら前に答えた問題はクリアして次の問題を表示
問題2 アメリカの首都は?
1.ワシントン 2.ニューヨーク 3.ロサンゼルス 4.テキサス
答え入力 1
問題3 日本が夏の時、オーストラリアの季節は次のうちどれ?
1.春 2.夏 3.秋 4.冬
答え入力 2
**********解答結果表示**********
問題1正解
問題2正解
問題3不正解 答えは冬です
Re: HELP
Posted: 2015年11月28日(土) 01:40
by 超初級者
かなり難度が高そうですね。
Re: HELP
Posted: 2015年11月28日(土) 17:14
by little
ここまで出来て本当に実装できないのか疑問ですが、
とりあえず形だけ実装してみました。
※エラー処理、警告、ファイル出力は対応していません。
main.c
► スポイラーを表示
コード:
//***********************************
//**********マクロ定義**********
//**********************************
#define CRT_SECURE_NO_WARNINGS
#define FILENAME_QUESTION "question.txt"//問題
#define FILENAME_RESULT "result.txt"//結果出力
#define MAX_QUESTION (10)//クイズ最大
#define SELECT_ANSWER (4)//選択数
#include <stdio.h>
#include <stdlib.h>
//**********構造体定義**********
typedef struct{
char aQuestion[256]; // 問題
char aSelect[256]; // 解答群
char sAnswer[50]; // 正解語群
int nAnswer; // 解答
bool judge; // 正解判定
}QUIZ_INFO;
//***********プロトタイプ宣言**********
void Opening(void);//オープニングタイトル
void Input_Question(void);//問題ファイルの読み込み
void Question(void);//解答
void OutputResult(void);//結果ファイル出力
//**********グローバル変数定義**********
QUIZ_INFO quizInfo[MAX_QUESTION];
int nAnswer[MAX_QUESTION];
int main(void)
{
//Opening();
Input_Question();
Question();
OutputResult();
//getchar();
return 0;
}
void Opening(void)
{
printf("*********クイズゲーム*************\n");
}
void Input_Question(void)
{
int cntQuestion;
FILE *fp;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
fp = fopen(FILENAME_QUESTION, "r");
if (fp == NULL)
{
printf("ファイルオープンエラー。");
exit(-1);
}
for (cntQuestion = 0; cntQuestion < MAX_QUESTION; pQuiz++, cntQuestion++)
{
fscanf(fp, "%s", pQuiz->aQuestion);
fscanf(fp, "%s", pQuiz->aSelect);
fscanf(fp, "%d", &pQuiz->nAnswer);
fscanf(fp, "%s", pQuiz->sAnswer);
pQuiz->judge = false;
}
fclose(fp);
}
void Question(void)
{
int input, cnt;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
// 出題
for (cnt = 0; cnt < MAX_QUESTION; pQuiz++, cnt++)
{
// 前置き
Opening();
// 問題/選択肢出力
printf("%s\n",pQuiz->aQuestion);
printf("%s\n",pQuiz->aSelect);
// エラー処理(未実装)
scanf("%d", &input);
// 正解不正解情報格納
if (pQuiz->nAnswer == input)
{
pQuiz->judge = true;
}
else
{
pQuiz->judge = false;
}
// 問題を入力したら前に答えた問題はクリアして次の問題を表示
system("cls"); // Windows
//system("reset"); // Linux
}
}
void OutputResult(void)
{
int cnt;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
// 情報出力(未実装)
printf("**********解答結果表示**********\n");
for (cnt = 0; cnt < MAX_QUESTION; pQuiz++, cnt++)
{
if (pQuiz->judge == true)
{
printf("問題%d正解\n", cnt+1);
}
else
{
printf("問題%d不正解\t答えは%sです\n", cnt+1, pQuiz->sAnswer);
}
}
getchar();
getchar();
}
question.txt
► スポイラーを表示
コード:
問題1 正解2を想定
1.ロンドン 2.リオデジャネイロ 3.北京 4.シドニー
2
リオデジャネイロ
問題2 正解1を想定
1.ワシントン 2.ニューヨーク 3.ロサンゼルス 4.テキサス
1
ワシントン
問題3 正解0を想定
1.春 2.夏 3.秋 4.冬
0
いえないよ
問題4 正解0を想定
1.春 2.夏 3.秋 4.冬
0
みせられないよ
問題5 正解0を想定
1.春 2.夏 3.秋 4.冬
0
ちょっとだけ
問題6 正解0を想定
1.春 2.夏 3.秋 4.冬
0
いいよ
問題7 正解0を想定
1.春 2.夏 3.秋 4.冬
0
お
問題8 正解0を想定
1.春 2.夏 3.秋 4.冬
0
は
問題9 正解0を想定
1.春 2.夏 3.秋 4.冬
0
よ
問題10 正解0を想定
1.春 2.夏 3.秋 4.冬
0
う
画面消し以外の動作確認
OS:Windows7
環境:Visual Studio2010...ぇ
Re: HELP
Posted: 2015年11月28日(土) 20:27
by ryo
"result.txt"がないです。
Re: HELP
Posted: 2015年11月28日(土) 20:59
by little
little さんが書きました:※エラー処理、警告、ファイル出力は対応していません。
読めますか...?
期待値を表示出来ている"はず"なので、あとは適当に編集してファイル出力するだけのはずなんですが…
ryo さんが書きました:"result.txt"がないです。
いいから黙って全部やれということでしょうか…?
Re: HELP
Posted: 2015年11月28日(土) 21:19
by softya(ソフト屋)
当掲示板では課題の丸投げを禁止させていただいております。
ryoさんの元のコード自体が既に問題として組まれていたものではないか?と推測されますので、この質問は丸投げになっているのではないでしょうか。
littleさんが最大限のヒントで回答をされておりますので、あとは努力していただけませんでしょうか。
Re: HELP
Posted: 2015年11月29日(日) 00:51
by ryo
すいません
考えてやってみましたができませんでした
月曜日までなので急いでいます
Re: HELP
Posted: 2015年11月29日(日) 01:13
by softya(ソフト屋)
その頑張った途中経過のコードを貼ってもらえればアドバイスが貰えると思います。
コンパイルが通らなくても構いません。
Re: HELP
Posted: 2015年11月29日(日) 01:16
by softya(ソフト屋)
残念なことですがマルチポストされていると思われるものを発見しました。
http://chiebukuro.yahoo.co.jp/my/myspac ... r=dbwlduhw
当掲示板のルールなのですが、相互リンクをお願いします。
Re: HELP
Posted: 2015年11月29日(日) 03:20
by little
マルチポスト先
教えてくださいC言語500枚
ファイルを読み込んでもおかしな表示をしてしまいます。
分からないので修正したソースを教えてください。
期待出力
► スポイラーを表示
ryo さんが書きました:*********クイズゲーム*************
問題1 来年のオリンピックの開催地は?
1.ロンドン 2.リオデジャネイロ 3.北京 4.シドニー
答え入力 2
問題を入力したら前に答えた問題はクリアして次の問題を表示
問題2 アメリカの首都は?
1.ワシントン 2.ニューヨーク 3.ロサンゼルス 4.テキサス
答え入力 1
問題3 日本が夏の時、オーストラリアの季節は次のうちどれ?
1.春 2.夏 3.秋 4.冬
答え入力 2
**********解答結果表示**********
問題1正解
問題2正解
問題3不正解 答えは冬です
ここを見れば入出力時の動作が見えるはずなんですが一応別途記載します
input
output
► スポイラーを表示
コード:
*********クイズゲーム*************
問題1 正解2を想定
1.ロンドン 2.リオデジャネイロ 3.北京 4.シドニー
*********クイズゲーム*************
問題2 正解1を想定
1.ワシントン 2.ニューヨーク 3.ロサンゼルス 4.テキサス
*********クイズゲーム*************
問題3 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題4 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題5 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題6 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題7 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題8 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題9 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題10 正解0を想定
1.春 2.夏 3.秋 4.冬
**********解答結果表示**********
問題1正解
問題2不正解 答えはワシントンです
問題3不正解 答えはいえないよです
問題4不正解 答えはみせられないよです
問題5不正解 答えはちょっとだけです
問題6不正解 答えはいいよです
問題7不正解 答えはおです
問題8不正解 答えははです
問題9不正解 答えはよです
問題10不正解 答えはうです
・何処がどう
「おかしい表示」なんですか…?
・マルチポスト先の不正解時の
表示形式が違いますがどういうことですか…?
・問題も私が作るんですか…?
※OutputResultで想定されるファイル出力(書き込み)は「r」ではないです。
※マルチポスト先のInput_Questionを変更した理由を教えて下さい。
変更前
► スポイラーを表示
コード:
void Input_Question(void)
{
int cntQuestion;
FILE *fp;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
fp = fopen(FILENAME_QUESTION, "r");
if (fp == NULL)
{
printf("ファイルオープンエラー。");
exit(-1);
}
for (cntQuestion = 0; cntQuestion < MAX_QUESTION; pQuiz++, cntQuestion++)
{
fscanf(fp, "%s", pQuiz->aQuestion);
fscanf(fp, "%s", pQuiz->aSelect);
fscanf(fp, "%d", &pQuiz->nAnswer);
fscanf(fp, "%s", pQuiz->sAnswer);
pQuiz->judge = false;
}
fclose(fp);
}
変更後
► スポイラーを表示
コード:
void Input_Question(void)
{
int cntQuestion;
FILE *fp;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
fp = fopen(FILENAME_QUESTION, "r");
if (fp == NULL)
{
printf("ファイルオープンエラー。");
exit(-1);
}
for (cntQuestion = 0; cntQuestion < MAX_QUESTION; pQuiz++, cntQuestion++)
{
fscanf(fp, "%s", pQuiz->aQuestion);
for (int cntSelect = 0; cntSelect < SELECT_ANSWER; cntSelect++)
{
fscanf(fp, "%s", pQuiz->aSelect);
}
fscanf(fp, "%d", &pQuiz->nAnswer);
fscanf(fp, "%s", pQuiz->sAnswer);
pQuiz++;
}
fclose(fp);
}
非表示エリア
この非表示エリアを表示するには、登録し、ログインする必要があります。
Re: HELP
Posted: 2015年11月29日(日) 11:44
by ryo
"question.txt"に問題
"result.txt"に問題番号 入力した答え 正解か不正解か 正しい答えを
書き込まないといけません。
Re: HELP
Posted: 2015年11月29日(日) 13:57
by little
ryo さんが書きました:**********解答結果表示**********
問題1正解
問題2正解
問題3不正解 答えは冬です
ryo さんが書きました:"question.txt"に問題
"result.txt"に問題番号 入力した答え 正解か不正解か 正しい答えを
書き込まないといけません。
入力した答えを出力する条件が増えているようにしか見えません。
※問題番号 入力した答え 正解か不正解か 正しい答えを出力する状態に変更しました。
※ファイル出力も入れました。
main.c
► スポイラーを表示
コード:
#define CRT_SECURE_NO_WARNINGS
#define FILENAME_QUESTION "question.txt" // 問題
#define FILENAME_RESULT "result.txt" // 結果出力
#define MAX_QUESTION (10) // クイズ最大
#define SELECT_ANSWER (4) // 選択数
#include <stdio.h>
#include <stdlib.h>
//**********構造体定義**********
typedef struct{
char aQuestion[256]; // 問題
char aSelect[SELECT_ANSWER][256]; // 解答群
char sAnswer[50]; // 正解語群
int nAnswer; // 解答
int uAnswer; // ユーザー解答
}QUIZ_INFO;
//***********プロトタイプ宣言**********
void Opening(void); // オープニングタイトル
void Input_Question(void); // 問題ファイルの読み込み
void Question(void); // 解答
void OutputResult(void); // 結果ファイル出力
//**********グローバル変数定義**********
QUIZ_INFO quizInfo[MAX_QUESTION];
int nAnswer[MAX_QUESTION];
int main(void)
{
//Opening();
Input_Question();
Question();
OutputResult();
//getchar();
return 0;
}
void Opening(void)
{
printf("*********クイズゲーム*************\n");
}
void Input_Question(void)
{
int cntQuestion, cntSelect;
FILE *fp;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
fp = fopen(FILENAME_QUESTION, "r");
if (fp == NULL)
{
printf("ファイルオープンエラー。");
exit(-1);
}
for (cntQuestion = 0; cntQuestion < MAX_QUESTION; pQuiz++, cntQuestion++)
{
fscanf(fp, "%s", pQuiz->aQuestion);
// 選択肢分別途文字データ格納
for (cntSelect = 0; cntSelect < SELECT_ANSWER; cntSelect++)
{
fscanf(fp, "%s", pQuiz->aSelect[cntSelect]);
}
fscanf(fp, "%d", &pQuiz->nAnswer);
fscanf(fp, "%s", pQuiz->sAnswer);
}
fclose(fp);
}
void Question(void)
{
int cnt, cntSelect;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
// 出題
for (cnt = 0; cnt < MAX_QUESTION; pQuiz++, cnt++)
{
// 前置き
Opening();
// 問題
printf("%s\n", pQuiz->aQuestion);
// 選択肢
for (cntSelect = 0; cntSelect < SELECT_ANSWER; cntSelect++)
{
printf("%s ", pQuiz->aSelect[cntSelect]);
}
printf("\n");
// エラー処理(未実装)
scanf("%d", &pQuiz->uAnswer);
// 問題を入力したら前に答えた問題はクリアして次の問題を表示
system("cls"); // Windows
//system("reset"); // Linux
}
}
void OutputResult(void)
{
int cnt;
// FILE *fp;
QUIZ_INFO *pQuiz;
pQuiz = &quizInfo[0];
// 情報出力(未実装)
/*fp = fopen(FILENAME_RESULT, "w+");
if (fp == NULL)
{
printf("ファイルオープンエラー。");
exit(-1);
}
fprintf(fp, "**********解答結果表示**********\n");*/
printf("**********解答結果表示**********\n");
for (cnt = 0; cnt < MAX_QUESTION; pQuiz++, cnt++)
{
if (pQuiz->nAnswer == pQuiz->uAnswer)
{
// fprintf(fp, "問題%d正解\n", cnt + 1);
printf("問題%d正解\n", cnt + 1);
}
else
{
// fprintf(fp, "問題%d不正解\tあなたの答え%s\t正解は%sです\n", cnt+1, pQuiz->aSelect[pQuiz->uAnswer-1], pQuiz->sAnswer);
printf("問題%d不正解\tあなたの答え%s\t正解は%sです\n", cnt+1, pQuiz->aSelect[pQuiz->uAnswer-1], pQuiz->sAnswer);
}
}
// fclose(fp);
getchar();
getchar();
}
question.txt
► スポイラーを表示
コード:
問題1 正解2を想定
1.ロンドン 2.リオデジャネイロ 3.北京 4.シドニー
2
2.リオデジャネイロ
問題2 正解1を想定
1.ワシントン 2.ニューヨーク 3.ロサンゼルス 4.テキサス
1
1.ワシントン
問題3 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.いえないよ
問題4 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.みせられないよ
問題5 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.ちょっとだけ
問題6 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.いいよ
問題7 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.お
問題8 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.は
問題9 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.よ
問題10 正解0を想定
1.春 2.夏 3.秋 4.冬
0
0.う
result.txt
► スポイラーを表示
コード:
**********解答結果表示**********
問題1正解
問題2不正解 あなたの答え2.ニューヨーク 正解は1.ワシントンです
問題3不正解 あなたの答え2.夏 正解は0.いえないよです
問題4不正解 あなたの答え2.夏 正解は0.みせられないよです
問題5不正解 あなたの答え2.夏 正解は0.ちょっとだけです
問題6不正解 あなたの答え2.夏 正解は0.いいよです
問題7不正解 あなたの答え2.夏 正解は0.おです
問題8不正解 あなたの答え2.夏 正解は0.はです
問題9不正解 あなたの答え2.夏 正解は0.よです
問題10不正解 あなたの答え2.夏 正解は0.うです
input
output
► スポイラーを表示
コード:
*********クイズゲーム*************
問題1 正解2を想定
1.ロンドン 2.リオデジャネイロ 3.北京 4.シドニー
*********クイズゲーム*************
問題2 正解1を想定
1.ワシントン 2.ニューヨーク 3.ロサンゼルス 4.テキサス
*********クイズゲーム*************
問題3 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題4 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題5 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題6 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題7 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題8 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題9 正解0を想定
1.春 2.夏 3.秋 4.冬
*********クイズゲーム*************
問題10 正解0を想定
1.春 2.夏 3.秋 4.冬
**********解答結果表示**********
問題1正解
問題2不正解 あなたの答え2.ニューヨーク 正解は1.ワシントンです
問題3不正解 あなたの答え2.夏 正解は0.いえないよです
問題4不正解 あなたの答え2.夏 正解は0.みせられないよです
問題5不正解 あなたの答え2.夏 正解は0.ちょっとだけです
問題6不正解 あなたの答え2.夏 正解は0.いいよです
問題7不正解 あなたの答え2.夏 正解は0.おです
問題8不正解 あなたの答え2.夏 正解は0.はです
問題9不正解 あなたの答え2.夏 正解は0.よです
問題10不正解 あなたの答え2.夏 正解は0.うです
改版