鱼C论坛

 找回密码
 立即注册
查看: 1294|回复: 3

[已解决]用c写的简易型扫雷出了点问题求解

[复制链接]
发表于 2020-2-16 10:25:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  昨天在B站看到一名up主 你已经是大佬啦快和萌新们聊天吧 的视频,他用c语言写了一个仅有29代码的扫雷,我这个小白为了提高代码量,就按照他的代码动手写了写,就是这个:
#include<stdlib.h>
#include<stdio.h>
#define OUTSIDE(x, y) (x < 0 || 8 < x || y < 0 || 8 < y)
int map[81] = { 0 }, mark[81] = { 0 }, count = 81, bomb = -4, i, j, k;
int node[8][2] = { 1,0,-1,0,0,1,0,-1,-1,-1,1,-1,-1,1,1,1 };
void setBomb(int x, int y) {
        for (int i = 0, j, k, m, n; i < -bomb && (j = rand() % 9, k = rand() % 9, 1);)
                if (!(map[9 * k + j] == 9 || j == x && k == y) && (i++, map[9 * k + j] = 9))
                        for (int i = 0; i < 8 && (m = j + node[i][0], n = k + node[i][1], 1); i++)
                                !(OUTSIDE(m, n) || map[9 * n + m] == 9) && map[9 * n + m]++;
}
void open(int x, int y) {
        if (OUTSIDE(x, y) || mark[9 * y + x] > 0)return;
        if (mark[9 * y + x] = 1, count--, map[9 * y + x] > 0)return;
        for (int i = 0; i < 8; i++)open(x + node[i][0], y + node[i][1]);
}
int main() {
        system("mode con:cols=18 lines=12");
        for (srand((unsigned)malloc(1)); 1; open(j, k), system("cls")) {
                for (i = 0; i < 81; i++)
                        if (!printf(mark[i] || !bomb ? map[i] ? "" : "  " : " *"))
                                printf(" %c", map[i] < 9 ? map[i] + 48 : '@');
                if (count <= bomb && printf("You win!\n"))break;
                else if (!bomb&&printf("Game over!\n"))break;
                printf("剩余%d:\n输入坐标:", count), scanf_s("%d%d", &j, &k);
                bomb < 0 && (setBomb(j, k), bomb = -bomb), map[k * 9 + j] - 9 || (bomb = 0);
        }
        system("pause");
}
  我完全按照他的代码写了下来,可第7行总是在编译时报错,我最初以为是自己写错了,可反复检查后并没有。后来我去他放源码网站复制了源码,编译时还是第7行报错,我这个萌新好疑惑啊。难道因为我用的是Devc++而他用的是VS?
最佳答案
2020-2-16 10:53:58
注意看错误提示,我用dev c++ 默认配置编译也会报错
[Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
[Note] use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code

error行是错误描述,note行是建议的解决办法
第一行的意思是for循环中初始化循环变量需要C99或者C11标准的支持
第二行告诉你在编译时候增加命令告诉编译器使用C99或者C11编译

具体做法是:
工具→编译选项→勾选 编译时加入以下命令
填入  -std=c99
保存重新编译即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-16 10:27:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-16 10:53:58 | 显示全部楼层    本楼为最佳答案   
注意看错误提示,我用dev c++ 默认配置编译也会报错
[Error] 'for' loop initial declarations are only allowed in C99 or C11 mode
[Note] use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code

error行是错误描述,note行是建议的解决办法
第一行的意思是for循环中初始化循环变量需要C99或者C11标准的支持
第二行告诉你在编译时候增加命令告诉编译器使用C99或者C11编译

具体做法是:
工具→编译选项→勾选 编译时加入以下命令
填入  -std=c99
保存重新编译即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2020-2-16 11:32:42 | 显示全部楼层
SHRS23 发表于 2020-2-16 10:53
注意看错误提示,我用dev c++ 默认配置编译也会报错
[Error] 'for' loop initial declarations are only a ...

感谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 02:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表