程式設計 dev c++猜數字

我基本上大概打出來了,但現在差在我不知道要如何在猜中數字後,詢問要不要繼續玩,如果要就繼續玩一個新的遊戲!如果不要就跳出來!

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {

int q,ans,min=0,max=99;

srand (time(0));

q=rand ()%100;

do

{

printf ("從 %d ~ %d\n輸入一個數:",min,max);

scanf ("%d",&ans);

if (ans == q)

{

printf ("BINGO\n");

printf("\nContinue? (y/n)");

}

else if (ans > q)

{

max=ans;

printf ("比%d小\n",ans);

}

else

{

min=ans;

printf ("比%d大\n",ans);

}

}while (1);

printf("\nEnd of program.");

return 0;

}

3 個解答

評分
  • 卸貨
    Lv 5
    6 年前
    最佳解答

    你只要把每個功能、或每個動作抽開,每一個動作就都變成很單純的動作;

    當東西變單純了,你要做什麼改變都方便。

    下面我用你的程式碼做修改呈現:

    #include <stdbool.h> // 我加了這個

    #include <stdio.h>

    #include <stdlib.h>

    #include <time.h>

    void play_game(void) // 我改了這裡

    {

    int q,ans,min=0,max=99;

    srand(time(0));

    q=rand()%100;

    do

    {

    printf("從 %d ~ %d\n輸入一個數:",min,max);

    scanf("%d",&ans);

    if (ans == q)

    {

    printf("BINGO\n");

    // 我刪了這裡:printf("\nContinue? (y/n)");

    }

    else if (ans > q)

    {

    max=ans;

    printf("比%d小\n",ans);

    }

    else

    {

    min=ans;

    printf("比%d大\n",ans);

    }

    } while( ans != q ); // 我改了這裡

    // 我刪了這裡:printf("\nEnd of program.");

    // 我刪了這裡:return 0;

    }

    // 我加了下面這一大段

    bool ask_if_run_again(void)

    {

    char answer;

    printf("Continue ? (y/n):");

    scanf("%c", &answer);

    return answer == 'y' || answer == 'Y';

    }

    int main(int argc, char *argv[])

    {

    do

    {

    play_game();

    } while( ask_if_run_again() );

    return 0;

    }

    還有問題再問

    2014-10-11 20:06:03 補充:

    補充說明:你還要把 srand 那一段移出來搬到新的 main 底下。

    另外,我還再把你的 play_game 再進行拆分,程式碼補充因為字數限制,將貼到意見區。

    int generate_answer(int min, int max)

    {

    return rand() % ( max - min + 1 ) + min;

    }

    2014-10-11 20:06:13 補充:

    int get_user_guess(int hint_min, int hint_max)

    {

    int guess;

    printf("從 %d ~ %d 輸入一個數:", hint_min, hint_max);

    while( !scanf("%d", &guess) )

    {}

    return guess;

    }

    2014-10-11 20:07:01 補充:

    void user_guest_analysis(int guess, int answer, int *hint_min, int hint_max)

    {

    if( guess > answer )

    {

    printf("比%d小\n", guess);

    *hint_max = guess;

    }

    else if( guess < answer )

    {

    printf("比%d大\n", guess);

    *hint_min = guess;

    }

    2014-10-11 20:07:10 補充:

    else

    {

    printf("BINGO\n");

    }

    }

    2014-10-11 20:07:24 補充:

    void play_game(void)

    {

    static const int answer_min = 0;

    static const int answer_max = 99;

    int answer = generate_answer(answer_min, answer_max);

    int hint_min = min;

    int hint_max = max;

    do

    {

    int guess = get_user_guess(hint_min, hint_max);

    2014-10-11 20:07:36 補充:

    user_guest_analysis(guess, answer, &hint_min, &hint_max);

    } while( guess != answer );

    }

    2014-10-11 23:37:10 補充:

    你想要多重迴圈,那就寫啊,把拆開來的東西全部組回去就好了!

    不過,這樣拆不好嗎?

  • 6 年前

    * 九州娛樂 http://*****

    [電子遊戲]

    拉霸、水果盤、7PK、5PK

    [運彩遊戲]

    棒球、籃球、足球、網球、冰球、各種體育經典賽事

    [真人遊戲]

    百家樂、21點、骰寶、輪盤、牌九、三公、輪盤、翻攤、牛牛、二八杠

    [對戰遊戲]

    台灣麻將、德州撲克、骰盅吹牛、四支刀、鬥地主、十三支、二八槓、暗棋、接龍

    [彩球遊戲]

    香港六合、台灣樂透、今彩539、樂合彩、大陸時時彩、基諾彩、北京賽車、賽狗、賽馬、指數

    [優惠活動]

    1. 新舊會員儲值就送500點

    2. 真人百家樂彩金等你拿

    九州娛樂 http://*****

    歡迎免費體驗試玩!!

  • 6 年前

    我是想說可不可以把他們用多重回圈的方式寫在一個大迴圈裡面

    2014-10-11 23:46:03 補充:

    這樣拆方便許多,但老師出的作業是寫多重回圈的方式!!抱歉!!那我知道了,我就組回去看看!!如果還是不行我就把他們拆開好了!!謝謝你的幫忙^0^

還有問題?馬上發問,尋求解答。