#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");