首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言實例練習

C語言練習實例94:猜數字遊戲完整實現

     編輯:C 語言實例練習

C語言練習實例94:猜數字遊戲完整實現

本實例實現一個經典的猜數字遊戲:程序隨機生成 1~100 的整數,玩家反覆輸入猜測,程序提示「太大」、「太小」或「猜中」,並根據猜測次數給予不同等級評價,支持重複遊戲。

程序分析

  • 使用 srand(time(NULL)) 初始化隨機種子,rand() % 100 + 1 生成目標數。
  • 主循環讀取用戶輸入,與目標比較,更新計數器。
  • 猜中後根據次數輸出等級(神級、王級、大師級、鑽石級、需提高),並詢問是否重玩(Y/N),若選擇重玩則遞歸調用 caizi()。
  • 注意 getchar() 用於吸收換行符,避免 scanf("%c") 讀取到殘留換行符。

源代碼

// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void caizi(void) {
    int n;
    char begin;
    int count = 1;
    srand((int)time(NULL));
    int m = (rand() % 100) + 1;

    puts("遊戲開始,請輸入數字:");

    while (1) {
        scanf("%d", &n);
        if (n == m) {
            printf("猜中了,使用了 %d 次!\n", count);
            if (count == 1) {
                printf("你是神級人物了!膜拜\n");
                getchar();
                printf("你已經達到最高級別,還需要玩嗎?Y/N \n");
                scanf("%c", &begin);
                if (begin == 'Y' || begin == 'y')
                    caizi();
                else
                    printf("謝謝,再見!\n");
            } else if (count <= 5) {
                printf("你是王級人物了!非常贊\n");
                getchar();
                printf("需要挑戰最高級別不?Y/N \n");
                scanf("%c", &begin);
                if (begin == 'Y' || begin == 'y')
                    caizi();
                else
                    printf("謝謝,再見!\n");
            } else if (count <= 10) {
                printf("你是大師級人物了!狂贊\n");
                getchar();
                printf("需要挑戰最高級別不?Y/N \n");
                scanf("%c", &begin);
                if (begin == 'Y' || begin == 'y')
                    caizi();
                else
                    printf("謝謝,再見!\n");
            } else if (count <= 15) {
                printf("你是鑽石級人物了!怒贊\n");
                getchar();
                printf("需要挑戰最高級別不?Y/N \n");
                scanf("%c", &begin);
                if (begin == 'Y' || begin == 'y')
                    caizi();
                else
                    printf("謝謝,再見!\n");
            } else {
                getchar();
                printf("你的技術還有待提高哦!重玩? Y/N\n");
                scanf("%c", &begin);
                if (begin == 'Y' || begin == 'y')
                    caizi();
                else
                    printf("謝謝,再見!\n");
            }
            break;
        } else if (n < m) {
            puts("太小了!");
            puts("重新輸入:");
        } else {
            puts("太大了!");
            puts("重新輸入:");
        }
        count++;
    }
}

int main(void) {
    caizi();
    system("pause");
    return 0;
}

運行示例

遊戲開始,請輸入數字:
50
太大了!
重新輸入:
25
太小了!
重新輸入:
40
太大了!
重新輸入:
30
太大了!
重新輸入:
27
太小了!
重新輸入:
28
猜中了,使用了 6 次!
你是大師級人物了!狂贊
需要挑戰最高級別不?Y/N
N
謝謝,再見!

改進建議

  • 遞歸調用 caizi() 可能導致棧溢出,建議改用循環控制重玩邏輯。
  • 增加輸入合法性檢查(如非數字輸入)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved