首页
学习
活动
专区
工具
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循环使用方法,以及数组赋值方法!

78640

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.5K10

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,所以这些函数处理这样数组时,判断结束不准确答,会出现乱码

76040

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

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

7310

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

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

69920

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

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

2.3K20

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;

80110

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.3K20

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

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

5410

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

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

3.4K30

万字长文 | Go语言上手-基础语言 | 第三届字节跳动青训营笔记

2.16基础语法-字符串格式化 2.17基础语法-JSON处理 2.18基础语法-时间处理 2.19基础语法-数字解析 2.20基础语法-进程信息 3.1猜谜游戏介绍 3.1.1猜谜游戏-生成随机数...3.1.2猜谜游戏-生成随机数效果 3.1.2猜谜游戏-生成随机数V2 3.1.3猜谜游戏-读取用户输入 1.4猜谜游戏-实现判断逻辑 3.1.5猜谜游戏-实现游戏循环 3.2在线词典介绍 3.2.1在线词典...1.3字节跳动为什么全面拥抱GO语言 最初使用Python, 由于性能问题换成了Go C++ 不太适合在线Web业务 早期团队非Java背景 性能比较好 部署简单、学习成本低 内部RPCHTTP框架推广...3.1.5猜谜游戏-实现游戏循环 此时我们程序大致可以正常工作了,但是玩家只能输入一次猜测,无论猜测是否正确,程序都会突退出。为了改变这种行为,让游戏可以正常玩下去,我们需要加一个循环。...就这样,我们已经成功地在Golang里面构建了一个猜谜游戏。在这个过程中,我们复习了之前很多概念,比如变量循环、函数控制流错误处理。

1.4K30

C语言关于字符字符库函数

前言 在C语言中,由于字符操作较频繁,所以C语言本身提供了一些对于字符串处理库函数。...'\0' 结束; 2)该函数会将源字符串中'\0'一同拷贝到目标空间,如果目标字符串原先就有内容,就会被拷贝内容覆盖掉,包括'\0'也是; 3)目标空间必须足够大,以确保能存放源字符串,如果放不下就会造成数组越界访问...(可打印) isgraph 任何图形字符 isprint 任何可打印字符,包括图形字符空白字符 大写 -> 小写 tolower int tolower (int c); 小写 -> 大写 toupper...差别就是memmove函数处理源内存块目标内存块是可以重叠; 2)如果源空间目标空间出现重叠,就得使用memmove函数处理。...当然,除此之外,C语言库函数中还有许多有趣有关字符字符函数,如果你有兴趣想要了解,可以通过cplusplus网站或cppreference网站找到它们,里面都有对每一个函数详细各个部分说明

28440

深入解析 C 语言 for 循环、break continue

C语言 for 循环 当您确切地知道要循环执行代码块次数时,可以使用 for 循环而不是 while 循环 for (语句 1; 语句 2; 语句 3) {   // 要执行代码块 } 语句 1...= 1; i <= 10; i++) {  printf("%d x %d = %d\n", number, i, number * i); } return 0; C 语言 break continue...break continue 您也可以在 while 循环使用 break continue: break 示例 int i = 0; while (i < 10) { if (i =...printf("%d", myNumbers[0]); // 输出 25 更改数组元素 要更改特定元素值,请参阅索引号: myNumbers[0] = 33; 循环遍历数组 您可以使用 for 循环遍历数组元素...(myNumbers) / sizeof(myNumbers[0]); printf("%d", arraySize); // 输出 5 改进循环循环中,最好使用数组大小来遍历,以适应不同大小数组

29810
领券