C语言疯狂打字游戏:代码解析和错误修复

本篇文章将详细讲解一个使用C语言实现的疯狂打字游戏,并分析代码逻辑,重点讲解关于“不可指定数组类型“char [50]””的错误修复方法。

游戏规则:

游戏将会随机显示一系列乱序的字母,玩家需要根据字母输入对应的正确单词。

代码解析:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_WORDS 10
#define MAX_WORD_LENGTH 50
char words[MAX_WORDS][MAX_WORD_LENGTH] = {
    "apple",
    "banana",
    "orange",
    "watermelon",
    "strawberry",
    "pineapple",
    "grapefruit",
    "kiwi",
    "blueberry",
    "mango"
};
int main() {
    int size;
    char input[MAX_WORD_LENGTH];
    srand(time(0));
    printf("欢迎来到疯狂打字游戏!\n");
    printf("你将会看到一系列乱序的字母,你需要输入对应的正确单词。\n");
    printf("输入\"exit\"可以退出游戏。\n");

    int score = 0;
    int round = 1;
    while (1) {
        printf("\n第 %d 轮:\n", round);
        // 随机选择一个单词
        int randomIndex = rand() % MAX_WORDS;
        char word[MAX_WORD_LENGTH];
        strcpy(word, words[randomIndex]);
        // 乱序字母
        int wordLength = strlen(word);
        for (int i = 0; i < wordLength; i++) {
            int randomIndex = rand() % wordLength;
            char temp = word[i];
            word[i] = word[randomIndex];
            word[randomIndex] = temp;
        }
        // 显示乱序字母
        printf("乱序字母:%s\n", word);
        // 接受用户输入
        scanf("%49s", input);
        // 检查退出条件
        if (strcmp(input, "exit") == 0) {
            break;
        }
        // 检查答案
        if (strcmp(input, words[randomIndex]) == 0) {
            printf("回答正确!\n");
            score += 10;
        }
        else {
            printf("回答错误!正确答案是:%s\n", words[randomIndex]);
        }
        round++;
    }
    printf("\n游戏结束!你的得分是:%d\n", score);
    return 0;
}

错误修复:

代码中出现“不可指定数组类型“char [50]””的错误,是因为以下代码行:

input = (int*)malloc(size * sizeof(int));

这段代码试图使用malloc函数为input数组分配内存。但是input已经是一个大小为MAX_WORD_LENGTH的字符数组,不需要额外分配内存。

正确的解决方法:

将上述代码行更改为:

scanf("%49s", input);

这样就可以直接使用scanf函数读取用户输入的字符串并存储到input数组中。

完整的优化代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX_WORDS 10
#define MAX_WORD_LENGTH 50
char words[MAX_WORDS][MAX_WORD_LENGTH] = {
    "apple",
    "banana",
    "orange",
    "watermelon",
    "strawberry",
    "pineapple",
    "grapefruit",
    "kiwi",
    "blueberry",
    "mango"
};
int main() {
    char input[MAX_WORD_LENGTH];
    srand(time(0));
    printf("欢迎来到疯狂打字游戏!\n");
    printf("你将会看到一系列乱序的字母,你需要输入对应的正确单词。\n");
    printf("输入\"exit\"可以退出游戏。\n");

    int score = 0;
    int round = 1;
    while (1) {
        printf("\n第 %d 轮:\n", round);
        // 随机选择一个单词
        int randomIndex = rand() % MAX_WORDS;
        char word[MAX_WORD_LENGTH];
        strcpy(word, words[randomIndex]);
        // 乱序字母
        int wordLength = strlen(word);
        for (int i = 0; i < wordLength; i++) {
            int randomIndex = rand() % wordLength;
            char temp = word[i];
            word[i] = word[randomIndex];
            word[randomIndex] = temp;
        }
        // 显示乱序字母
        printf("乱序字母:%s\n", word);
        // 接受用户输入
        scanf("%49s", input);
        // 检查退出条件
        if (strcmp(input, "exit") == 0) {
            break;
        }
        // 检查答案
        if (strcmp(input, words[randomIndex]) == 0) {
            printf("回答正确!\n");
            score += 10;
        }
        else {
            printf("回答错误!正确答案是:%s\n", words[randomIndex]);
        }
        round++;
    }
    printf("\n游戏结束!你的得分是:%d\n", score);
    return 0;
}

总结:

本文详细讲解了C语言疯狂打字游戏的代码逻辑,并分析并修复了代码中的错误。希望本文能够帮助你更好地理解C语言数组的使用和内存分配。


原文地址: https://www.cveoy.top/t/topic/pKNb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录