ページ 11

教えてください。

Posted: 2009年4月07日(火) 16:35
by
プログラムを作り無事にエラーを出さずにコンパイルに成功したのですが、実行すると望んでいたプログラムと違いました・・・・
自分なりに違うところを考えてみたのですが結局どこが間違っているのかわからなかったのでヒントを下さい><
答えを教えてもらうと成長しないのでヒントでお願いします。
たぶんアルゴリズムが違うと思うのですが・・・・
//日常英会話穴埋め問題//
#include <stdio.h>

int main(void)
{
	int answer_no=0;		//問題数//
	char user_answer=0;		//アプリ利用者の答えを代入する変数//
	char apri_answer=0;		//アプリ本体の答えを代入する変数//
	int correct=0;		//正解数を格納する変数//
	printf("日常英会話問題\n");
	while(answer_no != 10)
	{
		if(answer_no == 0)
		{
			printf("【問.1】日曜日どこで待ち合わせしますか?:");
			printf("Where shall we ( ① ) on Sunday?\n");
			scanf("%c",&user_answer);
			apri_answer='meet';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 1)
		{
			printf("\n【問.2】そこにはどうやって行けますか?:");
			printf("How do I ( ② ) there?\n");
			scanf("%c",&user_answer);
			apri_answer='get';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 2)
		{
			printf("\n【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:");
			printf("My ( ③ ) is Hao, it\'s spelled H-O-A.\n");
			scanf("%c",&user_answer);
			apri_answer='name';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 3)
		{
			printf("\n【問.4】どちらへ行かれますか?:");
			printf("Where would you ( ④ ) to go?\n");
			scanf("%c",&user_answer);
			apri_answer='like';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 4)
		{
			printf("\n【問.5】道に迷ってしまいました。:");
			printf("Excuse me. I have ( ⑤ ) my way.\n");
			scanf("%c",&user_answer);
			apri_answer='lost';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 5)
		{
			printf("\n【問.6】ドライブへ行こうよ。:");
			printf("Let\'s ( ⑥ ) for a drive.\n");
			scanf("%c",&user_answer);
			apri_answer='go';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 6)
		{
			printf("\n【問.7】もっとゆっくり話してもらえますか?:");
			printf("Could you speak ( ⑦ ) slowly?\n");
			scanf("%c",&user_answer);
			apri_answer='more';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 7)
		{
			printf("\n【問.8】英語はあまり話せません。:");
			printf("I don\'t speak English very ( ⑧ ).\n");
			scanf("%c",&user_answer);
			apri_answer='well';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 8)
		{
			printf("\n【問.9】部屋を見せていただけますか?:");
			printf("May I ( ⑨ ) the room,please?\n");
			scanf("%c",&user_answer);
			apri_answer='see';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		else
		{
			printf("\n【問.10】お疲れ様でした。また明日!:");
			printf("OK, thanks. ( ⑩ ) you tomorrow!\n");
			scanf("%c",&user_answer);
			apri_answer='see';
			if(user_answer == apri_answer)
			{
				correct=correct+1;
			}
		}
		answer_no++;
	}
	printf("以上で日常英会話問題を終了します。\n");
	printf("あなたの正解数は%dです。\n",&correct);
	printf("お疲れ様でした!");
	return 0;
}

Re:教えてください。

Posted: 2009年4月07日(火) 16:37
by
実行すると
問1は入力できて、その後は入力されずにすべて表示され、正解数もありえない数になってしまいます。

Re:教えてください。

Posted: 2009年4月07日(火) 16:44
by バグ
『文字』と『文字列』の違いについて調べてみることをオススメします。頑張って♪(^-^)

Re:教えてください。

Posted: 2009年4月07日(火) 16:48
by Mist
XさんはVB経験者なんですかね?

C言語での文字列の扱い方が完璧に間違っています。
以下のページで勉強してください。

http://www9.plala.or.jp/sgwr-t/c/sec02.html#s2-4

あと、開発環境が記載されていませんがビルドしたときにワーニングたくさん表示されているんじゃないですか?
それらもきちんとチェックしてください。

Re:教えてください。

Posted: 2009年4月07日(火) 16:49
by
バグさん
迅速な回答ありがとうございます。
まだC言語を始めて一ヶ月も経たない初心者ですが頑張って間違ってるところを探してみます^^

Re:教えてください。

Posted: 2009年4月07日(火) 16:51
by non
たくさんあるので、1つだけ・・・
apri_answer='meet';
これは、できません。
char apri_answer[20];
のように答えを入れる配列を用意し、
strcpy(apri_answer,"meet");
で、答えを代入します。
入力した答えと一致しているかは
strcmp関数を使います。

Re:教えてください。

Posted: 2009年4月07日(火) 16:53
by
配列を使うのですか・・・・
C言語って難しいですね

Re:教えてください。

Posted: 2009年4月07日(火) 17:07
by
わからない・・・・

Re:教えてください。

Posted: 2009年4月07日(火) 17:27
by
なんか編集したらすごいエラーが出てしまったのですが・・・ww
//日常英会話穴埋め問題//
#include <stdio.h>
#include <string.h>

int main(void)
{
	int answer_no=0;		//問題数//
	char user_answer[20];		//アプリ利用者の答えを代入する変数//
	char apri_answer[20];		//アプリ本体の答えを代入する変数//
	int correct=0;		//正解数を格納する変数//
	printf("日常英会話問題\n");
	while(answer_no != 10)
	{
		if(answer_no == 0)
		{
			printf("【問.1】日曜日どこで待ち合わせしますか?:");
			printf("Where shall we ( ① ) on Sunday?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="meet");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 1)
		{
			printf("\n【問.2】そこにはどうやって行けますか?:");
			printf("How do I ( ② ) there?\n");
			scanf("%c",&user_answer[/url]);
			strcpy(apri_answer="get");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 2)
		{
			printf("\n【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:");
			printf("My ( ③ ) is Hao, it\'s spelled H-O-A.\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="name");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 3)
		{
			printf("\n【問.4】どちらへ行かれますか?:");
			printf("Where would you ( ④ ) to go?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="like");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 4)
		{
			printf("\n【問.5】道に迷ってしまいました。:");
			printf("Excuse me. I have ( ⑤ ) my way.\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="lost");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 5)
		{
			printf("\n【問.6】ドライブへ行こうよ。:");
			printf("Let\'s ( ⑥ ) for a drive.\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="go");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 6)
		{
			printf("\n【問.7】もっとゆっくり話してもらえますか?:");
			printf("Could you speak ( ⑦ ) slowly?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="more");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 7)
		{
			printf("\n【問.8】英語はあまり話せません。:");
			printf("I don\'t speak English very ( ⑧ ).\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="well");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 8)
		{
			printf("\n【問.9】部屋を見せていただけますか?:");
			printf("May I ( ⑨ ) the room,please?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="see");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else
		{
			printf("\n【問.10】お疲れ様でした。また明日!:");
			printf("OK, thanks. ( ⑩ ) you tomorrow!\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer="see");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		answer_no++;
	}
	printf("以上で日常英会話問題を終了します。\n");
	printf("あなたの正解数は%dです。\n",&correct);
	printf("お疲れ様でした!");
	return 0;
}

Re:教えてください。

Posted: 2009年4月07日(火) 17:32
by SCI
strcpyの使い方に問題があるようです。

#追記
よく見たら、scanfの使用法及び配列型の扱いも混乱されていますね。

Re:教えてください。

Posted: 2009年4月07日(火) 17:35
by Mist
scanfとstrcpyの使い方が間違ってます。
文字列を読み込む場合は%cではあません。
strcpyの書き方はnonさんが書いてくれているけど。

あと、変数に&をつけた場合の意味についても勉強してください。

> printf("あなたの正解数は%dです。\n",&correct);
これは間違いです。

Re:教えてください。

Posted: 2009年4月07日(火) 17:38
by
ありがとうございます。確認してみたところ直してエラーが出ませんでした。
//日常英会話穴埋め問題//
#include <stdio.h>
#include <string.h>

int main(void)
{
	int answer_no=0;		//問題数//
	char user_answer[20];		//アプリ利用者の答えを代入する変数//
	char apri_answer[20];		//アプリ本体の答えを代入する変数//
	int correct=0;		//正解数を格納する変数//
	printf("日常英会話問題\n");
	while(answer_no != 10)
	{
		if(answer_no == 0)
		{
			printf("【問.1】日曜日どこで待ち合わせしますか?:");
			printf("Where shall we ( ① ) on Sunday?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"meet");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 1)
		{
			printf("\n【問.2】そこにはどうやって行けますか?:");
			printf("How do I ( ② ) there?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"get");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 2)
		{
			printf("\n【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:");
			printf("My ( ③ ) is Hao, it\'s spelled H-O-A.\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"name");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 3)
		{
			printf("\n【問.4】どちらへ行かれますか?:");
			printf("Where would you ( ④ ) to go?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"like");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 4)
		{
			printf("\n【問.5】道に迷ってしまいました。:");
			printf("Excuse me. I have ( ⑤ ) my way.\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"lost");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 5)
		{
			printf("\n【問.6】ドライブへ行こうよ。:");
			printf("Let\'s ( ⑥ ) for a drive.\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"go");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 6)
		{
			printf("\n【問.7】もっとゆっくり話してもらえますか?:");
			printf("Could you speak ( ⑦ ) slowly?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"more");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 7)
		{
			printf("\n【問.8】英語はあまり話せません。:");
			printf("I don\'t speak English very ( ⑧ ).\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"well");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else if(answer_no == 8)
		{
			printf("\n【問.9】部屋を見せていただけますか?:");
			printf("May I ( ⑨ ) the room,please?\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"see");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		else
		{
			printf("\n【問.10】お疲れ様でした。また明日!:");
			printf("OK, thanks. ( ⑩ ) you tomorrow!\n");
			scanf("%c",&user_answer);
			strcpy(apri_answer,"see");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct=correct+1;
			}
		}
		answer_no++;
	}
	printf("以上で日常英会話問題を終了します。\n");
	printf("あなたの正解数は%dです。\n",&correct);
	printf("お疲れ様でした!");
	return 0;
}

Re:教えてください。

Posted: 2009年4月07日(火) 17:47
by
できました^^
たぶんこれであってますよね?
//日常英会話穴埋め問題//
#include <stdio.h>
#include <string.h>

int main(void)
{
int answer_no=0; //問題数//
char user_answer[20]; //アプリ利用者の答えを代入する変数//
char apri_answer[20]; //アプリ本体の答えを代入する変数//
int correct=0; //正解数を格納する変数//
printf("日常英会話問題\n");
while(answer_no != 10)
{
if(answer_no == 0)
{
printf("【問.1】日曜日どこで待ち合わせしますか?:");
printf("Where shall we ( ① ) on Sunday?\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"meet");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 1)
{
printf("\n【問.2】そこにはどうやって行けますか?:");
printf("How do I ( ② ) there?\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"get");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 2)
{
printf("\n【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:");
printf("My ( ③ ) is Hao, it\'s spelled H-O-A.\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"name");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 3)
{
printf("\n【問.4】どちらへ行かれますか?:");
printf("Where would you ( ④ ) to go?\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"like");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 4)
{
printf("\n【問.5】道に迷ってしまいました。:");
printf("Excuse me. I have ( ⑤ ) my way.\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"lost");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 5)
{
printf("\n【問.6】ドライブへ行こうよ。:");
printf("Let\'s ( ⑥ ) for a drive.\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"go");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 6)
{
printf("\n【問.7】もっとゆっくり話してもらえますか?:");
printf("Could you speak ( ⑦ ) slowly?\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"more");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 7)
{
printf("\n【問.8】英語はあまり話せません。:");
printf("I don\'t speak English very ( ⑧ ).\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"well");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else if(answer_no == 8)
{
printf("\n【問.9】部屋を見せていただけますか?:");
printf("May I ( ⑨ ) the room,please?\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"see");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
else
{
printf("\n【問.10】お疲れ様でした。また明日!:");
printf("OK, thanks. ( ⑩ ) you tomorrow!\n");
scanf("%s",&user_answer);
strcpy(apri_answer,"see");
if(0 == strcmp(user_answer, apri_answer))
{
correct=correct+1;
}
}
answer_no++;
}
printf("以上で日常英会話問題を終了します。\n");
printf("あなたの正解数は%dです。\n",correct);
printf("お疲れ様でした!");
return 0;
}

教えてもらいつつ完成しましたが、なんとなく理解できてきたと思います。
わかると楽しいですね@@
これからもっと勉強していいものを作りたいと思います!

またわからなくなったら質問させていただくこともあると思いますがそのときはよろしくお願いします。

Re:教えてください。

Posted: 2009年4月07日(火) 17:48
by
すみません。
タグを使い忘れて見づらくなってしまいました・・・orz

Re:教えてください。

Posted: 2009年4月07日(火) 17:57
by Mist
> scanf("%s",&user_answer);

解決になってるけどここ間違ってるよ(^^;
%sの時は&いらないよ。

Re:教えてください。

Posted: 2009年4月07日(火) 18:30
by 初級者
後はあれですかね、
同じような処理を繰り返しているのを
関数化してみるとか…。

Re:教えてください。

Posted: 2009年4月07日(火) 18:43
by
あれ・・・まだ間違ってましたかww

Re:教えてください。

Posted: 2009年4月07日(火) 23:56
by conio
強制では無いですが、
----------------------
correct=correct+1; 
⇒correct++;
----------------------
こちらの方が、短く書けたりします。

あと、
--------------------------------------------------------------------------------
printf("\n【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:");
printf("My ( ③ ) is Hao, it\'s spelled H-O-A.\n");
--------------------------------------------------------------------------------
重要では無いかもしれませんが、"H-A-O" が "H-O-A"になってます。


最後に、単純に1~10までの問題を表示・解答させるだけならばwhile文とanswer_noという変数は
無くても問題なかったりします。
----------------------------------------------------------------------------------
int main(void)
{
	char user_answer[20];		//アプリ利用者の答えを代入する変数//
	char apri_answer[20];		//アプリ本体の答えを代入する変数//
	int correct=0;		//正解数を格納する変数//
	printf("日常英会話問題\n");

			printf("【問.1】日曜日どこで待ち合わせしますか?:");
			printf("Where shall we ( ① ) on Sunday?\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"meet");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}

			printf("\n【問.2】そこにはどうやって行けますか?:");
			printf("How do I ( ② ) there?\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"get");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}
			printf("\n【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:");
			printf("My ( ③ ) is Hao, it\'s spelled H-O-A.\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"name");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}
			printf("\n【問.4】どちらへ行かれますか?:");
			printf("Where would you ( ④ ) to go?\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"like");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}
			printf("\n【問.5】道に迷ってしまいました。:");
			printf("Excuse me. I have ( ⑤ ) my way.\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"lost");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}

			printf("\n【問.6】ドライブへ行こうよ。:");
			printf("Let\'s ( ⑥ ) for a drive.\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"go");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}

			printf("\n【問.7】もっとゆっくり話してもらえますか?:");
			printf("Could you speak ( ⑦ ) slowly?\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"more");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}

			printf("\n【問.8】英語はあまり話せません。:");
			printf("I don\'t speak English very ( ⑧ ).\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"well");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}

			printf("\n【問.9】部屋を見せていただけますか?:");
			printf("May I ( ⑨ ) the room,please?\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"see");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}
			printf("\n【問.10】お疲れ様でした。また明日!:");
			printf("OK, thanks. ( ⑩ ) you tomorrow!\n");
			scanf("%s",user_answer);
			strcpy(apri_answer,"see");
			if(0 == strcmp(user_answer, apri_answer))
			{
				correct++;
			}
	printf("以上で日常英会話問題を終了します。\n");
	printf("あなたの正解数は%dです。\n",correct);
	printf("お疲れ様でした!");
	return 0;
}

Re:教えてください。

Posted: 2009年4月08日(水) 05:16
by hss12
短く書くならこんな感じでどうでしょうか。
#include <stdio.h>
#include <string.h>
/*問題数*/
#define QNO 10

char *question[/url]={
  "【問.1】日曜日どこで待ち合わせしますか?:Where shall we ( ① ) on Sunday?\n",
  "【問.2】そこにはどうやって行けますか?:How do I ( ② ) there?\n",
  "【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:My ( ③ ) is Hao, it\'s spelled H-A-O.\n",
  "【問.4】どちらへ行かれますか?:Where would you ( ④ ) to go?\n",
  "【問.5】道に迷ってしまいました。:Excuse me. I have ( ⑤ ) my way.\n",
  "【問.6】ドライブへ行こうよ。:Let\'s ( ⑥ ) for a drive.\n",
  "【問.7】もっとゆっくり話してもらえますか?:Could you speak ( ⑦ ) slowly?\n",
  "【問.8】英語はあまり話せません。:I don\'t speak English very ( ⑧ ).\n",
  "【問.9】部屋を見せていただけますか?:May I ( ⑨ ) the room,please?\n",
  "【問.10】お疲れ様でした。また明日!:OK, thanks. ( ⑩ ) you tomorrow!\n",
};

char *apri_answer[/url]={
  "meet",
  "get",
  "name",
  "like",
  "lost",
  "go",
  "more",
  "well",
  "see",
  "see",
};

int main(void){
  char user_answer[20];    /*アプリ本体の答えを代入する変数*/
  int correct=0;   /*正解数を格納する変数*/
  int i;

  printf("日常英会話問題\n");

  for(i=0; i<QNO; i++){
    printf("%s", question);
    scanf("%s", user_answer);
    if(strcmp(user_answer, apri_answer) == 0) correct++;
  }

  printf("以上で日常英会話問題を終了します。\n");
  printf("あなたの正解数は%dです。\n", correct);
  printf("お疲れ様でした!\n");
  return 0;
}

Re:教えてください。

Posted: 2009年4月08日(水) 09:10
by conio
>hss12さん
そうですね
あえて、プログラムを大きく改変するような事はしませんでしたが、
予め問題や解答などのデータベースを作っておけば良いかなと思います。
---------------------------------------------------------------------

今のところ、このプログラムでは どこを間違えたのかが分からないので
出来れば、後で正しい解答や間違った箇所を表示するものがあっても良いとも思いました。

Re:教えてください。

Posted: 2009年4月08日(水) 14:52
by hss12
>後で正しい解答や間違った箇所を表示
書いてみました。分かりにくいかもしれないです。
#include <stdio.h>
#include <string.h>

#define QNO 10

char *question[/url]={
  "【問.1】日曜日どこで待ち合わせしますか?:Where shall we ( ① ) on Sunday?\n",
  "【問.2】そこにはどうやって行けますか?:How do I ( ② ) there?\n",
  "【問.3】私の名前は覇王です。つづりはエイチ・エー・オーです。:My ( ③ ) is Hao, it\'s spelled H-A-O.\n",
  "【問.4】どちらへ行かれますか?:Where would you ( ④ ) to go?\n",
  "【問.5】道に迷ってしまいました。:Excuse me. I have ( ⑤ ) my way.\n",
  "【問.6】ドライブへ行こうよ。:Let\'s ( ⑥ ) for a drive.\n",
  "【問.7】もっとゆっくり話してもらえますか?:Could you speak ( ⑦ ) slowly?\n",
  "【問.8】英語はあまり話せません。:I don\'t speak English very ( ⑧ ).\n",
  "【問.9】部屋を見せていただけますか?:May I ( ⑨ ) the room,please?\n",
  "【問.10】お疲れ様でした。また明日!:OK, thanks. ( ⑩ ) you tomorrow!\n",
};

char *apri_answer[/url]={
  "meet",
  "get",
  "name",
  "like",
  "lost",
  "go",
  "more",
  "well",
  "see",
  "See",
};

int main(void){
  char user_answer[QNO][20];    /*アプリ本体の答えを代入する変数*/
  int result[QNO]; /*結果を代入する変数*/
  int correct=0;   /*正解数を格納する変数*/
  int i;

  printf("日常英会話問題\n");

  for(i=0; i<QNO; i++){
    printf("%s", question);
    scanf("%s", user_answer);
    if(result = strcmp(user_answer, apri_answer)==0) correct++;
  }

  printf("以上で日常英会話問題を終了します。\n");
  printf("    結果 解答  正解\n");
  for(i=0; i<QNO; i++){
    printf("問.%-2d %s  ", i+1, result ? "○" : "×");
    printf("%-6s%-6s\n", user_answer, apri_answer);  
  }
  printf("あなたの正解数は%dです。\n", correct);
  if(correct==QNO) printf("全問正解です!\n");
  printf("お疲れ様でした!\n");
  return 0;
}