无数组实现棋盘随机位置打印字符'C'的C语言问题
实现随机位置打印'C'(无数组版)
问题背景
现有如下C语言代码,输出一个由| 组成的类棋盘结构:
#include<stdio.h> int main(){ int size; int i ; int k; printf("room size : "); scanf("%d",&size); for(k=2; k<=size; k++) { for(i=0; i<=size; i++) { printf("| "); } printf("\n"); } for(i=0; i<=size; i++) { printf("| "); } }
输入5时的输出:
room size : 5 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
需求:不使用数组,随机选择一个方格打印字符C,预期输出示例(随机坐标对应第4行第4列):
room size : 5 | | | | | | | | | | | | | | | | | | | | |C| | | | | | | | |
解决方案
核心思路是先生成随机的行/列坐标,再在打印每个位置时判断是否命中该坐标,无需数组存储数据。具体实现步骤:
- 添加随机数依赖:引入
<stdlib.h>和<time.h>头文件,用于生成不重复的随机数。 - 生成随机坐标:用当前时间初始化随机种子,再生成匹配棋盘范围的行号和列号。
- 修改打印逻辑:打印每个位置时,判断当前行/列是否等于随机坐标,命中则打印
|C,否则打印|。
修改后的完整代码:
#include<stdio.h> #include<stdlib.h> #include<time.h> int main(){ int size; int i, k; int rand_row, rand_col; printf("room size : "); scanf("%d",&size); // 初始化随机种子,保证每次运行随机结果不同 srand(time(NULL)); // 生成1~size的随机行号(对应棋盘的size行) rand_row = rand() % size + 1; // 生成0~size的随机列号(对应每行的size+1个位置) rand_col = rand() % (size + 1); // 循环打印size行,替代原代码的分段循环 for(k=1; k<=size; k++) { for(i=0; i<=size; i++) { if(k == rand_row && i == rand_col) { printf("|C"); } else { printf("| "); } } printf("\n"); } return 0; }
代码说明
srand(time(NULL)):用系统当前时间作为随机种子,避免每次运行随机结果重复。rand_row = rand() % size + 1:生成1到size的整数,对应棋盘的行号(原代码最终输出size行)。rand_col = rand() % (size + 1):生成0到size的整数,对应每行的size+1个|位置。- 合并原代码的两个打印循环,统一处理每行的打印判断,逻辑更简洁。
内容的提问来源于stack exchange,提问作者Player1 ready
相关产品推荐
相关产品推荐

