简化类内演示的代码

Simplify code for an in-class demo

本文关键字:代码      更新时间:2023-10-16

在技术写作课上,我将带领全班同学(在学校的电脑上使用Visual Studio 2013)参与制作一个简单的猜游戏程序。我正试图使它尽可能的直接和容易理解,因为我的许多同学不是程序员。

有什么我可以更简单或更容易理解的吗?

using namespace std;
int main(){
    char response = 'y';
    while (response != 'n'){
        srand(time(NULL));
        int guess = -1;
        int answer = (rand() % 100) + 1;
        while (guess != 0){
            cout << "Guess a number between 1 and 100. Guess 0 to quit game." << endl;
            cin >> guess;
            if (guess == 0){
                break;
            }
            else if (guess == answer){
                cout << "Correct!" << endl;
                break;
            }
            else if (guess < answer){
                cout << "Too low, guess again!" << endl;
            }
            else {
                cout << "Too high, guess again!" << endl;
            }
        }
        cout << "Play again? (y/n): ";
        cin >> response;
    }
}

考虑删除"play again" 删除"Guess 0 to quit"。实际上,丢掉"quit"是因为终端的Ctrl-C或关闭按钮已经在那里了。

answer重命名为不那么容易混淆的名称(picksecret),并将其命名为const

为"voodoo"提取一个函数来生成一个随机数。让它更清晰!

while变成do {} while,这样你就不会在任何事情发生之前有这个不直观的检查response != 'n' !

while(guess!=0)也一样。但是,您可以完全去掉冗余条件。这里已经有break了…

丢掉else if,因为break已经使分支冗余。

对缺失的错误处理做一个礼貌的评论…这样人们就不会在他们的程序运行混乱时起诉你了:)

同样,以增量方式书写,例如

#include <iostream>
using namespace std;
void play_round();
int main() {
    srand(time(NULL));
    char response;
    do {
        play_round();
        cout << "Play again? (y/n): ";
        cin >> response;
    } while (response != 'n');
}
int pick_random(int from, int to) {
    return (rand() % (to-from+1)) + from;
}
void play_round() {
    const int secret = pick_random(1, 100);
    do {
        cout << "Guess a number between 1 and 100: ";
        int guess;
        cin >> guess;
        if (guess == secret) {
            cout << "Correct!" << endl;
            break;
        } 
    } while (true);
}

然后详细添加

        if (guess == 0) {
            break;
        }
最终

        if (guess < secret) {
            cout << "Too low, guess again!" << endl;
        }
        if (guess > secret) {
            cout << "Too high, guess again!" << endl;
        }

注意分支是如何独立的!

可选详细说明,做:

int pick_random(int from, int to) {
    return (rand() % (to-from+1)) + from;
}

和使用pick_random(1, 100)等:)