首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用一维数组和for循环的C语言字符猜谜游戏

是一种基于命令行界面的简单游戏。在游戏开始时,程序会随机选择一个单词作为答案,并将其转换为字符数组。玩家需要通过猜测字母来猜出答案。

游戏的主要逻辑如下:

  1. 程序随机选择一个单词作为答案,并将其转换为字符数组。
  2. 程序初始化一个与答案长度相同的字符数组,用于存储玩家的猜测结果。初始时,所有字符都用占位符(如下划线)表示。
  3. 程序进入循环,每次循环中,玩家可以输入一个字母作为猜测。
  4. 程序检查玩家的猜测是否在答案中存在,如果存在,则更新猜测结果数组中对应位置的字符。
  5. 程序检查猜测结果数组是否与答案完全匹配,如果匹配,则表示玩家猜对了答案,游戏结束。
  6. 如果猜测错误,程序会提示玩家剩余的猜测次数,并显示猜测结果数组的当前状态。
  7. 玩家可以继续输入猜测,直到猜对答案或猜测次数用尽。

这个游戏可以通过使用C语言的一维字符数组和for循环来实现。具体的代码实现可以参考以下示例:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#define MAX_GUESS_COUNT 6

int main() {
    char *words[] = {"apple", "banana", "orange", "grape", "melon"};
    int wordCount = sizeof(words) / sizeof(words[0]);
    
    srand(time(NULL));
    int randomIndex = rand() % wordCount;
    char *answer = words[randomIndex];
    int answerLength = strlen(answer);
    
    char *guessResult = malloc(answerLength + 1);
    memset(guessResult, '_', answerLength);
    guessResult[answerLength] = '\0';
    
    int guessCount = 0;
    
    printf("Welcome to the character guessing game!\n");
    printf("The word has %d letters. You have %d guesses.\n", answerLength, MAX_GUESS_COUNT);
    
    while (guessCount < MAX_GUESS_COUNT) {
        printf("Enter your guess: ");
        char guess;
        scanf(" %c", &guess);
        
        int found = 0;
        for (int i = 0; i < answerLength; i++) {
            if (answer[i] == guess) {
                guessResult[i] = guess;
                found = 1;
            }
        }
        
        if (strcmp(answer, guessResult) == 0) {
            printf("Congratulations! You guessed the word: %s\n", answer);
            break;
        }
        
        if (!found) {
            guessCount++;
            printf("Wrong guess! You have %d guesses left.\n", MAX_GUESS_COUNT - guessCount);
        }
        
        printf("Current guess result: %s\n", guessResult);
    }
    
    if (guessCount == MAX_GUESS_COUNT) {
        printf("Game over! You failed to guess the word: %s\n", answer);
    }
    
    free(guessResult);
    
    return 0;
}

在这个示例中,我们使用了一个字符串数组words来存储可能的答案,然后通过随机数生成一个索引来选择一个答案。接下来,我们使用malloc函数动态分配了一个字符数组guessResult,用于存储玩家的猜测结果。然后,我们使用for循环遍历答案的每个字符,检查玩家的猜测是否匹配。如果匹配,我们更新guessResult数组中对应位置的字符。最后,我们使用strcmp函数比较answerguessResult,如果完全匹配,则表示玩家猜对了答案。

这个游戏只是一个简单的示例,实际的游戏可以根据需求进行扩展和改进。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言中的字符数组和字符串

c语言字符数组和字符串: 1.存放字符的数组称为字符数组 char str[] 2....'\0'也被称为字符串结束标志 3.由" "包围的字符串会自动在末尾添加'\0' 4.逐个字符地给数组赋值并不会自动添加'\0' 5.局部变量初始化为零值会自动添加结束标志 6.直接使用一个指针指向字符串的形式...全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。.../直接使用一个指针指向字符串的形式 //最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。...全局数据区和栈区的字符串(也包 括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。 }

2.4K30

c语言之字符指针变量和字符数组的异同

1.字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第一个字符的地址),而不是将字符串放到字符指针变量中。 2.赋值方式。...对字符数组只能对各个元素进行赋值,不能用以下办法对字符数组进行赋值。...3.如果定义了一个字符数组,在编译时为它分配内存单元,它有确切的地址。...c[] = "world"; b = c;//这也是对的,因为b指向了c的首个元素 printf("%s\n", b); system("pause"); return...0; } 5.需要注意的是,若定义了一个字符指针变量,并使其指向了一个字符串,也可以用下标的形式引用指针变量所指的字符串中的字符,例如: #include #include<iostream

1.5K10
  • 一维数组和循环-c语言学习笔记

    数组的个数 一定是常量 int b[10]; //使用循环初始化数组 //for的循环方式 for (int i=0;i<10;i++) { //数组的下标可以使用变量 a[i]...=i*10+10; printf("a[%d] = %d\n",i,a[i]); } //while的循环方式 int m=0; int n=0; while(m<10) { a[...m]=n*10+10; printf("a[%d] = %d\n",m,a[m]); m++; n++; } //定义的同时初始化数组 //使用大括号来初始化数组 //如果使用{0}...来赋值,所有值都赋值为0 //括号中至少有一个值,后面的值自动为0 int c[10]={0}; //如果没有赋满的,后面的数组的值自动为0 //比如int c[10]={1,2,3,4,5}...后面的数组的值就会自动为0 return 0; } ps:这节课主要讲了一下数组的for循环和while循环的使用方法,以及数组赋值的方法!

    80040

    【C语言篇】数组和函数的实践:扫雷游戏(附源码)

    同时为了保持神秘,show数组开始时初始化为字符 '*',为了保持两个数组的类型⼀致,可以使⽤同⼀套函数处理,mine数组最开始也初始化为字符'0',布置雷改成'1'。...如下: test.c //⽂件中写游戏的测试逻辑 game.c //⽂件中写游戏中函数的实现等 game.h //⽂件中写游戏需要的数据类型和函数声明等 扫雷游戏的代码实现 game.h 其中方法会一一讲到...测试游戏的主要逻辑,是main函数所在的.c文件 一来先打印菜单 然后使用do-while循环让玩家可以多次玩游戏 #include "game.h" void menu() {...,我们实现另一个函数 利用数学关系,依次相加,注意mine数组里面是数字字符,所以我们要减去'0'才能得到真正的数字 使用循环简化一下也可以 //方法一: int GetMineCount(char...这里需要用递归 是否可以标记雷 是否可以加上排雷的时间显⽰ 等等·····,篇幅有限,就不再继续介绍了,各位读者有兴趣可以去实现一下呀 以上就是关于【C语言篇】数组和函数的实践:扫雷游戏(附源码

    9010

    C语言:字符数组的输入输出

    输入后各个字符数组的状态如下(摘自C语言谭浩强第三版): 0 1 2 3 4 5 6 7 8 9 a n a n \0 \0 \0 \0 \0 \0 i s \0 \0 \0 \0 \0 \0 \0...到底应该是什么样子的呢? 为了解决scanf函数不能完整地读入带有空格字符的字符串,C语言提供了一个专门用于字符串的函数gets,它读入全部字符(包括空格),直到遇到回车为止。...它读入全部字符(包括空格),直到遇到回车为止。gets()函数并不读取换行符'\n',它会把换行符替换成空字符'\0',作为c语言字符串结束的标志。...gets()函数就会访问未被分配的内存空间,如果这些内存未被使用,不会立即出现问题;如果这片空间已经存有数据,就会擦除掉程序中的其他数据,会导致程序中止。...C语言字符数组与字符串的种种   https://mp.csdn.net/postedit/84500208 #include void printByChar(char c[], int

    4.6K10

    c语言基础学习05_数组和字符串

    、三维数组排序、 字符串与字符数组、字符数组的初始化、字符数组的使用(以及字符数组和字符串的区别)、去除输出字符串结尾处的空格、 现在要去掉字符串最右面的空格,而不能去掉字符串中间的空格呢、随机数产生函数...字符数组定义: 字符数组也是内存中一段连续的char空间哦!(特别注意:字符数组并不) 所以在c语言中,字符串和字符数组有着千丝万缕的联系,特别相似,有时都是通用的哦!...说明了 char a[10];虽然是一个字符数组,但是它符合c语言中关于字符串的描述。...) 在c语言中,没有字符串这种数据类型,可以通过char的数组来替代,字符串就是以0结尾的char的数组。...,因为结尾没有以0结尾了,不符合c语言对字符串的定义和要求了。

    2.4K22

    C语言中字符数组只能存放字符串?字符数组和字符串的唯一区别?

    C语言中字符数组只能存放字符串? 不是的,C语言中字符数组既可以保存字符,又可以保存字符串。 字符数组本意就是是指用来存放字符数据的数组。字符数组的元素是字符类型的。字符数组用于存放字符或字符串。...C语言中字符数组的一般形式为: char 数组名[数据长度] 。...因此,C语言中字符数组不单单只能保存字符串。 字符数组百和字符串的唯一区别? 字符串必须有\0结束 但字符数组可以没有 没有的情况只有一个,就是字符吧数组所有的空间占用了。...\0的空间, 这样是可以的, 但是要是用字符串处理函数,如道puts,strcpy等函数的时候,这样的数组是不能当字符串来处理的,因为没有\0这个结束符,所有可能有很多乱码出现,这是正常的。...因为这些函回数需要\0来判断字符串的结束位置,但是这样的数组没有\0,所以这些函数处理这样的数组时,判断结束不准确答,会出现乱码

    82740

    C语言数组指针和指针数组的区别及使用方法

    引言: 在C语言编程中,数组指针和指针数组是两个常见的概念,它们在语法和用法上有一些区别。本篇博客将向你介绍C语言数组指针和指针数组的区别,并通过代码示例演示它们的使用方法。...一、数组指针 数组指针多用于二维数组及更高维的数组,在一维数组中运用并不简便,在一维数组中通常可以采用循环遍历的方法进行打印或输出。 数组指针是指向数组的指针变量。...数组指针通常用于遍历数组和传递数组作为函数参数,而指针数组通常用于存储和管理多个指针。 结论: 在本篇博客中,我们学习了C语言数组指针和指针数组的区别及使用方法。...通过代码示例,我们展示了如何使用数组指针和指针数组来访问数组元素和存储多个指针。对于理解和应用这两个概念,希望你能有更清晰的认识。...问题的拓展是对问题最好的解答,如果你想了解更多C语言的知识,点赞关注,让我们一同探讨C语言的奥妙。

    27610

    C语言常用的知识没多少之数组和字符串

    数据类型是之前讲解过的,在这里不再讲解。变量名要符合C语言的表示符。数据长度是要存放几个同类型的数据,一定是整型或ASCII中的字符型的数,实型(小数)是不能作为数组的数据长度。...数组元素的使用 使用数组元素的值是通过数组的下标来使用的。但是需要注意的是数组下标的开始是0。这与人们的日常思维不一样。...对数组的元素赋值和使用的时候可以用数组名和下标确定。 字符串 字符串是数组的特殊名称,指数据类型为字符型char的字符串。...举例代码如下 char n[20]; gets(n); 需要注意的是,数组的长度减一要大于等于输入字符串的长度。 putchar和puts putchar是将一个字符串输出到弹出框中。...参数是一个字符变量名。举例代码如下 ? puts是将字符串输入到弹出框。参数是字符串的名。举例代码如下 ? 至此C语言常用的知识已经讲完,其余没讲的是不太常用的(根据本人是否常用为标准)。

    72620

    c语言字符数组初始化的三种方式_c语言赋值字符串

    大家好,又见面了,我是你们的朋友全栈君。 C语言中字符数组的初始化与赋值,字符串相关函数!...1.字符数组初始化 在C语言中,字符串是当做字符数组来处理的;所以字符串有两种声明方式,一种是字符数组,一种是字符指针。...(2)用字符串常量来初始化字符数组:在c语言中,将字符串作为字符数组来处理。因此可以使用字符串来初始化字符数组。...char str[]; str="I am happy";//错误,字符数组的赋值只能按元素一一赋值(错误的原因: C语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,但是不可以直接给字符串赋值...(3)字符指针:在C语言中我们也可以使用字符指针来存储字符串。

    2.7K20

    【C 语言】字符串操作 ( 使用 数组下标 操作字符串 | 使用 char * 指针 操作字符串 )

    文章目录 一、使用 数组下标 或 指针 操作字符串 1、使用 数组下标 操作字符串 2、使用 char * 指针 操作字符串 二、代码示例 一、使用 数组下标 或 指针 操作字符串 ---- 1、使用...数组下标 操作字符串 使用 数组下标 访问 字符串 : 定义 字符数组 , 可以直接使用 数组名[下标] 访问 字符串中的 字符 ; char str[5] = "abc"; 访问方式 : /.../ 使用 数组下标 操作字符串 int i = 0; for(i = 0; i < 5; i ++) { printf("%c\n", str[i]);...} 2、使用 char * 指针 操作字符串 使用 指针 访问 字符串 : 将 指针 指向数组 首地址 , 然后可以借助 指针 运算 p + i , 计算从 p 地址开始的第 i 个元素的地址 ; char...5; i ++) { printf("%c\n", str[i]); } // 使用 指针 操作字符串 p = str; for(i = 0;

    96310

    C语言——for循环和while循环的效率区别——类似哨兵思想

    =u16device_cfg_num) { //遍历0到size-1的数值 i++; if(i==size) { i = -1; break; //必须break,否则数组溢出...,则把i保存 if(u16device_cfg_num == Device_ID_Table[i]) { i8id = i; break; //跳出循环,不再查找 } }...if(i == size) { //如果已经遍历完毕,仍未找到,则返回-1 i8id = -1; } return i8id; } 在for循环中每次循环都需要对i进行是否越界的判断...,而while循环查找只要对比一次即可,避免了查找过程中每次比较后都要判断查找位置是否越界的小技巧,看似与原先差别不大,但是总数据较多时,效率提高很明显,是非常好的编程技巧。...当然,“哨兵”也不一定在数组开始,也可以在数组的末端甚至是任何位置。

    1.4K20

    C语言——oj刷题——字符串左旋和轮转数组

    这个问题在编程中非常常见,特别是在字符串处理和算法实现中。 在C语言中,我们可以使用一种简单而有效的方法来完成字符串的左旋操作。...reverse函数用于反转字符串中指定范围内的字符。它使用两个指针(start和end)来遍历字符串,交换对应位置上的字符,直到两个指针相遇。...然后,它分别对前k个字符、剩余字符和整个字符串进行反转操作,最终完成字符串的左旋。 在main函数中,我们定义了一个示例字符串"abcdefg"和旋转位置k为2。...运行上述代码,输出将是: 原始字符串: abcdefg 左旋后的字符串: cdefgab 这就是用C语言完成字符串左旋的方法和示例代码。希望对你有所帮助!如果有任何问题,请随时提问。...第二题:轮转数组(力扣189) 解法一:(暴力解法) 利用循环每次移动一位,代码如下: //暴力做法 void rotate(int* nums, int numsSize, int k){ k

    7810

    对C语言分支和循环的粗浅认识

    鄙人来陈述一下自己的粗浅认知哈 1.分支语句有:if语句,switch语句。 他们的基本用法:首先if语句 其次switch的基本用法: 这个语句值得注意的是,表达式必须是整形。...2,循环语句 :do  while语句,while语句,还有for语句。 首先,while语句和if语句用法基本一致哈。...都是有条件满足条件表达式就做他们之后的程序的命令 其次,do  while语句这个语句,和其他语句有点区别,,它会先做一遍,再看看还做不做,表达式里就是判断还做不做。...最后就是for语句了,这语句是集合了(初始化,判断,调整于一起的循环,非常方便好用。这个来直接给大家举一个例子-->输出1到10直接的整数。

    5210

    C语言定义数组时使用枚举作为数组的下标

    所以这里通常都使用枚举变量作为下标来访问数组。...如下“` static char* language_type_data[] = { "Chinese", "German", "American" }; 这里定义了一个字符指针型数组,用来保存语言类型...这样写可读性很高,而且后期可以继续添加数组的成员,枚举的成员,且代码可以用循环判断来写,这样以后增加新成员只需要在枚举和数组上增加变量既可。但这段代码也有隐藏的问题。...看似可读性高的代码其实也是硬编码作为脚标,如果在输入数据时候数组和枚举的顺序有一些变化,就会出现bug,且这个bug很难被发现。...为了避免这种隐患可以在定义数组时候使用枚举作为数组的下标,这样即使数据输入混乱,但是只要数组定义时候枚举下标定义和数组成员可以对应正确就可以避免这种错误。

    3.5K30
    领券