こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

プログラミング(C言語) についてです。

プログラミング(C言語) についてです。

こんばんは。学校のプログラミングの課題が全くわからない所があるので教えて欲しいです・・・。


英単語テスト(5問)のプログラムを作るということなのですが、

たとえば、「問1:犬を英語で?」という問題に対して、scanfでユーザに英単語を入力させ

ユーザが「dog」と入力して正解のした場合は「正解」とだけ表示させて

ユーザがそれ以外を入力し、不正解のときは「不正解」という表示と共に正しい答えを一緒に表示するようにします。


charやstrcmpを使えばいいのはわかるんですが、

どのように作ればいいのかがよくわからなくて作れません・・・


C言語に詳しい方、


問1、犬を英語で?
『入力』
正解or不正解(正答:dog)表示

問2、猫を英語で?
『入力』
正解or不正解(正答:cat)表示

問3、豚を英語で?
『入力』
正解or不正解(正答:pig)表示

問4、空を英語で?
『入力』
正解or不正解(正答:sky)表示

問5、氷を英語で?
『入力』
正解or不正解(正答:ice)表示


となるようなプログラムを誰か書いていただけませんか?(;_;)

よろしくおねがいします・・・(;_;)

投稿日時 - 2010-09-28 06:56:30

QNo.6213114

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

まあ,わかりやすく。
余り長い文字列は入れないように。
難しければ,for文にでもしてください。

#include<stdio.h>
#include<stdlib.h>/*srand,rand,time関数を使うのに必要です*/
#include<string.h>/*strcmp関数を使うのに必要です*/
int main()
{
int i,j;
char s[20];/*scanfで入力するバッファです*/
char jpn[5][20]={"犬","猫","豚","空","氷"};/*日本語データ*/
char eng[5][20]={"dog","cat","pig","sky","ice"};/*英語データ*/

j=1;
srand( (unsigned)time( NULL ) );/*乱数発生の種です。難しければこれはいらない*/
i=rand() % 5;/*乱数を5で割った余りです。0,1,2,3,4*/
printf("終わるには0を入力してね\n");
printf("問%d %sを英語で?\n",j,jpn[i]);/*日本語表示,iがランダムだからランダムに表示します*/
scanf("%s", s);/*英語入力*/

while(strcmp(s,"0")!=0)/*入力が0でなければ繰返す*/
{
if (strcmp(s,eng[i])==0)/*入力が合っているか*/
printf("正解\n");
else

printf("不正解(正解:%s)\n", eng[i]);

j++;
i=rand() % 5;/*新しい乱数*/
printf("問%d %sを英語で?\n",j,jpn[i]);/*以下繰返し*/
scanf("%s", s);
}
return 0;

}

投稿日時 - 2010-09-28 23:28:33

ANo.2

せっかくなので配列で。
stdinの長さは何もチェックしてないからそこはお好みでガードを。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define QA_NUM 5
int main()
{
  char QAList[QA_NUM][2][64] = {{"犬", "dog"},
                  {"猫", "cat"},
                  {"豚", "pig"},
                  {"空", "sky"},
                  {"氷", "ice"}};
  int   QACnt;
  char  Line[256];

  for (QACnt = 0 ; QACnt < QA_NUM ; QACnt++)
  {
    printf("問%d、%sを英語で?\n", QACnt+1, &QAList[QACnt][0][0]);
    memset(Line, 0x00, sizeof(Line));
    scanf("%s", Line);
    if (0 == strcmp(Line, &QAList[QACnt][1][0]))
    {
      printf("正解\n");
    } else {
      printf("不正解(正答:%s)\n", &QAList[QACnt][1][0]);
    }
  }
  return 0;
}

投稿日時 - 2010-09-28 12:52:16

ANo.1

こんな感じの5回書けばいいと思う。
問題と答えを配列に入れてループすればもっとかっこよく書けるけど、
高々5回なので書いてもいいと思う。

#include <stdio.h>
#include <string.h>

int main(void)
{
char line[256 + 1];
char *r;
char s[256 + 1];
int n;

printf("問1. 犬を英語で?\n");

r = fgets(line, 256, stdin);
if (r == NULL) {
printf("エラー\n");
return 1;
}
n = sscanf(line, "%s", s);
if (n != 1) {
printf("エラー\n");
return 1;
}

if (strcmp(s, "dog") == 0) {
printf("正解\n");
} else {
printf("不正解(正解: dog)\n");
}

return 0;
}

投稿日時 - 2010-09-28 07:26:40

あなたにオススメの質問