#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void game(int,int,int);
int main(void)
{
int answer;
int m,M,n=10;
printf("輸入最小數字") ;
scanf("%d",&m);
printf("輸入最大數字");
scanf("%d",&M);
printf("請在10次內猜出數字\n");
srand(time(NULL));
answer=(rand( )%(M-m+1)+m);
while(1)
{
int guess;
printf("還有%d次目前範圍 %d ~ %d ,請猜:",n,m,M);
n--;
scanf("%d",&guess);
if(guess > M|| guess < m) exit(1);
if( n==0||guess==answer) break;
else{
if( guess > answer ) M=guess;
else m=guess;
}
}
if(n>0)
printf("你猜對了~\n");
else
printf("猜錯了~答案是:%d\n",answer);
}
最後一次猜中應該是猜對才對
但顯示猜錯
請問應該如何更改才會正確呢?
修改兩個地方
1.判斷猜對猜錯由 n>0 改成 guess==answer
2.int guess 的宣告搬到迴圈外面(最前面)
下圖是改成 5 次的測試結果
另外
看你的程式,會離開while,就是要符合if( n==0||guess==answer)這個條件,最後一次猜對表示,n==0和guess==answer都要同時成立。
所以當n==0時,碰到
if(n>0)
printf("你猜對了~\n");
else
printf("猜錯了~答案是:%d\n",answer);
}
0沒有大於0,自然就跑去猜錯的printf...
不過若你改成n>=0,就變成最後一次猜錯也會顯示猜對,所以你再想看看要怎麼修正if( n==0||guess==answer)這一段~~
將這兩段改一下
if( n==0||guess==answer) break;
// 改成
if( n<0||guess==answer) break;
if(n>0)
printf("你猜對了~\n");
// 改成
if(n>=0)
printf("你猜對了~\n");