ページ 11

質問です

Posted: 2009年7月06日(月) 23:27
by ユーリ
乱数で1~10の整数値を一個発生させて、これを答えとする。キーボードから値を入力して、その答えが、一致するまで繰り返すプログラムを作成せよ。ただし入力回数をカウントし、5回を超えたら入力を中止し答えを表示する。という問題なのですが
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
   int a,b,i;
  i=0;
  srand(time(NULL));
  printf("%3d\n",rand()%10+1);
  b=rand()%10+1;
  while(1){
  i++;
  printf("数字を入力してください");
  scanf("%d",a);
  if(a==b){
  printf("OKだよん");
  break;
  }
 
  if(i==5){
  printf("ざんね~ん\n");
  printf("答えは",b);
 break;
 }
 }
		return 0;
}
という感じで作ってみたのですがどこが違うのでしょうか?

Re:質問です

Posted: 2009年7月06日(月) 23:50
by DVDM
>>ユーリさん
まず、乱数を発生させている所です。
printf("%3d\n",rand()%10+1);
b=rand()%10+1;

・・・となっていますが、表示された内容と、bに入っている値は別々になる可能性があります。
printfで表示する場所でランダムな値を発生させ、bに代入する部分でも乱数を発生させているからです。
修正の一例として
b=rand()%10+1;
printf("%3d\n",b);
とでもしてやると、bにランダムな値が入り、それを表示しているので二回乱数を発生させたことによる値の不一致が防げます。

それと、scanfを用いて入力する所です。
scanf("%d", a); と書いている所ですが scanf("%d", &a); です。「&」がありません。

Re:質問です

Posted: 2009年7月07日(火) 00:07
by ユーリ
ありがとうございました。
解決いたしました。