iT邦幫忙

0

程式有bug

  • 分享至 

  • xImage
#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);
}

最後一次猜中應該是猜對才對
但顯示猜錯
請問應該如何更改才會正確呢?

建議用 程式區塊:</> 將程式包起來
另外將你錯誤的輸入與輸出的也列舉出來
否則其他人很難幫你更改
if( n==0||guess==answer) break;
這行當你最後一次猜中時,兩個都符合,但你跳出迴圈之後只有n>0才output 答對,此時n==0,所以他會判斷成答錯
有錯歡迎各位更正
jackkjh iT邦新手 5 級 ‧ 2021-12-22 21:59:23 檢舉
第一次問不清楚,下次還有問題會使用
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-22 09:18:01
最佳解答

修改兩個地方
1.判斷猜對猜錯由 n>0 改成 guess==answer
2.int guess 的宣告搬到迴圈外面(最前面)

下圖是改成 5 次的測試結果
https://ithelp.ithome.com.tw/upload/images/20211222/20001787PgG68CxJTJ.png

另外
https://ithelp.ithome.com.tw/upload/images/20211222/20001787I4Wstxcec4.png

jackkjh iT邦新手 5 級 ‧ 2021-12-22 22:00:09 檢舉

使用了,也成功了謝謝您

2
阿恢
iT邦新手 4 級 ‧ 2021-12-22 09:13:45

看你的程式,會離開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)這一段~~

jackkjh iT邦新手 5 級 ‧ 2021-12-22 22:00:44 檢舉

了解謝謝

2

將這兩段改一下

if( n==0||guess==answer) break;
// 改成
if( n<0||guess==answer) break;
if(n>0)
printf("你猜對了~\n");
// 改成
if(n>=0)
printf("你猜對了~\n");
jackkjh iT邦新手 5 級 ‧ 2021-12-22 22:02:11 檢舉

這樣迴圈會多一次,並且我測試時最後結果沒有變化,但是謝謝您

0
狼狼
iT邦新手 5 級 ‧ 2021-12-27 00:54:38

加油

我要發表回答

立即登入回答