同一段代码在vs2019中可以编译,但在vs2012中无法编译

0

以下代码与教程一致。

在vs2012进行编译时,出现了以下报错:
1>d:\software data\p\p5\p5\p5.c(272): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(272): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符
1>d:\software data\p\p5\p5\p5.c(272): error C2059: 语法错误:“)”
1>d:\software data\p\p5\p5\p5.c(273): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\software data\p\p5\p5\p5.c(277): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(277): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(277): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符
1>d:\software data\p\p5\p5\p5.c(277): error C2059: 语法错误:“)”
1>d:\software data\p\p5\p5\p5.c(278): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>d:\software data\p\p5\p5\p5.c(283): error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(283): error C2143: 语法错误 : 缺少“)”(在“类型”的前面)
1>d:\software data\p\p5\p5\p5.c(283): warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符
1>d:\software data\p\p5\p5\p5.c(283): error C2059: 语法错误:“)”

然而在vs2019中却可以正常运行编译,唯一的问题就是编译时游戏窗口的下边框丢失,其他部分完好。

由于学校作业要求编译软件只能用vs2012(且只能用.c后缀所以无法使用easyx),所以请大神提出解决方案,使它能在vs2012中正常编译,谢谢!

#include<stdio.h>        //printf、scanf
#include<Windows.h>      //获取控制台上坐标位置、设置字体颜色
#include<conio.h>        //接收键盘输入输出(kbhit()、getch())
#include<time.h>         //用于获取随机数

#define FrameX 13        //游戏窗口左上角的X轴坐标为13
#define FrameY 3         //游戏窗口左上角的Y轴坐标为3
#define Frame_height 20  //游戏窗口的高度为20
#define Frame_width  18  //游戏窗口的宽度为18

/*******定义全局变量********/
int i,j,Temp,Temp1,Temp2;       //temp,temp1,temp2用于记住和转换方块变量的值
//标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
int a[80][80]={0};              
int b[4];                       //标记4个“口”方块:1表示有方块,0表示无方块
struct Tetris                   //声明俄罗斯方块的结构体
{
	int x;                      //中心方块的x轴坐标
	int y;                      //中心方块的y轴坐标
	int flag;                   //标记方块类型的序号
	int next;                   //下一个俄罗斯方块类型的序号
	int speed;                  //俄罗斯方块移动的速度
	int number;                 //产生俄罗斯方块的个数
	int score;                  //游戏的分数
	int level;                  //游戏的等级
};
HANDLE hOut;                    //控制台句柄

/******函数声明******/
int color(int c);                    
void gotoxy(int x,int y);            //光标移到指定位置
void DrwaGameframe();                //绘制游戏边框
void Flag(struct Tetris *);          //随机产生方块类型的序号
void MakeTetris(struct Tetris *);    //制作俄罗斯方块
void PrintTetris(struct Tetris *);   //打印俄罗斯方块
void CleanTetris(struct Tetris *);   //清除俄罗斯方块的痕迹
int ifMove(struct Tetris *);         //判断是否能移动,返回值为1时能移动,否则不能移动
void Del_Fullline(struct Tetris *);  //判断是否满行,并删除满行的俄罗斯方块
void Gameplay();                     //开始游戏
void regulation();                   //游戏规则
void explation();                    //按键说明
void welcom();                       //欢迎界面
void Replay(struct Tetris * tetris); //重新开始游戏
void title();                        //欢迎界面上方的标题
void flower();                       //欢迎界面上的字符装饰花
void close();                        //关闭游戏

//文字颜色函数
int color(int c)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);//更改文字颜色
	return 0;
}

//获取屏幕光标位置
void gotoxy(int x,int y)
{
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

//欢迎界面上方的标题
void title()
{
	color(15);//亮白色
	gotoxy(24, 3);
	printf("趣 味 俄 罗 斯 方 块\n");

	color(11);//亮蓝色
	gotoxy(18, 5);
	printf("■");
	gotoxy(18, 6);
	printf("■■");
	gotoxy(18, 7);
	printf("■");

	color(14);//黄色
	gotoxy(26, 6);
	printf("■■");
	gotoxy(28, 7);
	printf("■■");

	color(10);//绿色
	gotoxy(36, 6);
	printf("■■");
	gotoxy(36, 7);
	printf("■■");

	color(13);//粉色
	gotoxy(45, 5);
	printf("■");
	gotoxy(45, 6);
	printf("■");
	gotoxy(45, 7);
	printf("■");
	gotoxy(45, 8);
	printf("■");

	color(12);//亮红色
	gotoxy(56, 6);
	printf("■");
	gotoxy(52, 7);
	printf("■■■");
}


//主函数
int main()
{
	title();//欢迎界面上的标题
	flower();//打印字符花
	welcom();
}

//绘制字符花
void flower()
{
	gotoxy(66,11);//确定屏幕上要输出的位置
	color(12);    //设置颜色
	printf("(_)");//红花上边花瓣

	gotoxy(64,12);
	printf("(_)");//红花左边花瓣

	gotoxy(68,12);
	printf("(_)");//红花右边花瓣

	gotoxy(66,13);
	printf("(_)");//红花下边花瓣

	gotoxy(67,12);
	color(6);
	printf("@");  //红色花蕊

	gotoxy(72,10);
	color(13);
	printf("(_)");//粉色左边花瓣

	gotoxy(76,10);
	printf("(_)");//粉色右边花瓣

	gotoxy(74,9);
	printf("(_)");//粉色上边花瓣

	gotoxy(74,11);
	printf("(_)");//粉色下边花瓣

	gotoxy(75,10);
	color(6);
	printf("@");  //粉色花蕊

	gotoxy(71,12);
	printf("|");  //两朵花之间的连接

	gotoxy(72,11);
	printf("/");  //两朵花之间的连接

	gotoxy(70,13);
	printf("\\|");

	gotoxy(70,14);
	printf("'|/");

	gotoxy(70,15);
	printf("\\|");

	gotoxy(71,16);
	printf("| /");

	gotoxy(71,17);
	printf("|");

	gotoxy(67,17);
	color(10);
	printf("\\\\\\\\");//草地

	gotoxy(73,17);
	printf("//");

	gotoxy(67,18);
	color(2);
	printf("^^^^^^^^");

	gotoxy(65,18);
	color(5);
	printf("汕 头 大 学");

	gotoxy(68,20);
	printf("蔡徐坤");
}

//菜单选项边框和字体
void welcom()
{
	int n;
	int i,j=1;
	color(14);                                //黄色边框
	for(i=9;i<=20;i++)                        //循环y轴坐标,打印输出上下边框===
	{
		for(j=15;j<=60;j++)                   //循环x轴坐标,打印输出左右边框||
		{
			gotoxy(j,i);
			if(i==9||i==20)printf("=");       //输出上下边框===
			else if(j==15||j==59)printf("||");//输出左右边框||
		}
	}

	color(12);//设置字体颜色为红色
	gotoxy(25, 12);//设置显示位置
	printf("1.开始游戏");//输出文字“1.开始游戏”
	gotoxy(40, 12);
	printf("2.按键说明");
	gotoxy(25, 17);
	printf("3.游戏规则");
	gotoxy(40, 17);
	printf("4.退出");
	gotoxy(21, 22);
	color(3);
	printf("请选择[1 2 3 4]:[]\b\b");
	color(14);
	scanf_s("%d", &n);  //输入选项
	switch (n)
	{
	case 1:             //输入1
		system("cls");  //清屏
		DrwaGameframe();//制作游戏窗口
		break;
	case 2:             //输入2
		break;
	case 3:             //输入3
		break;
	case 4:             //输入4
		break;
	}
}

//制作游戏窗口
void  DrwaGameframe()
{
	gotoxy(FrameX + Frame_width - 7, FrameY - 2);                //设置游戏名称的显示位置
	color(11);                                                   //亮蓝色
	printf("趣 味 俄 罗 斯 方 块");                              //打印游戏名称
	gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 7);            //设置上边框的显示位置
	color(2);                                                    //深绿色
	printf("**********");                                        //打印下一个出现方块的上边框
	gotoxy(FrameX + 2 * Frame_width + 13, FrameY + 7);
	color(3);                                                    //深蓝绿色
	printf("下一出现方块:");
	gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 13);
	color(2);
	printf("**********");                                        //打印下一个出现方块的下边框
	gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 17);
	color(14);                                                   //黄色
	printf("↑:旋转");
	gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 19);
	printf("空格:暂停游戏");
	gotoxy(FrameX + 2 * Frame_width + 3, FrameY + 15);
	printf("Esc:退出游戏");
	gotoxy(FrameX,FrameY);
	color(12);                                                   //红色
	printf("╓");                                                //打印框角
	gotoxy(FrameX + 2 * Frame_width - 2, FrameY);
	printf("╖");
	gotoxy(FrameX, FrameY+Frame_height);
	printf("╙");
	gotoxy(FrameX + 2 * Frame_width - 2, FrameY+Frame_height);
	printf("╜");
	a[FrameX][FrameY + Frame_height] = 2;
	a[FrameX + 2 * Frame_width - 2][FrameY + Frame_height] = 2;
	for(int i=2; i<2*Frame_width-2;i+=2)
	{
		gotoxy(FrameX+i,FrameY);
		printf("═");                                            //打印上横框
	}
		for(int i=2;i<2*Frame_width-2;i+=2)
	{
		gotoxy(FrameX+i,FrameY+Frame_height);
		printf("═");                                            //打印下横框
		a[FrameX+i][FrameY+Frame_height]=2;                      //标记下横框为游戏边框,防止方块出界
	}
	for(int i=1;i<Frame_height;i++)
	{
		gotoxy(FrameX,FrameY+i);
		printf("║");                                            //打印左竖框
		a[FrameX][FrameY+i]=2;									 //标记左竖框为游戏边框,防止方块出界
	}
		for(int i=1;i<Frame_height;i++)
	{
		gotoxy(FrameX+2*Frame_width-2,FrameY+i);
		printf("║");                                            //打印右竖框
		a[FrameX+2*Frame_width-2][FrameY+i]=2;					 //标记右竖框为游戏边框,防止方块出界
	}
}
悬赏金额:¥3元

1. 回答问题后,可以看到提问者联系方式。

2. 如果对问题有不明确的地方,可以在回复中写下你的疑问,就可以看到提问者的联系方式,然后详细沟通。

3. 如果私下沟通解决了问题,建议回答者将解决方案补充到本站,提问者勾选正确答案。每个人回答的问题数量,是能力的象征。

4. 回答问题后,可以通过提问者的联系方式私下协商领取悬赏的方式,本站不做任何干涉,不做担保,不抽取佣金,请双方谨慎操作。

0

把这个 for 循环里面的 int 去掉:

    for(int i=2; i<2*Frame_width-2;i+=2)
	{
		gotoxy(FrameX+i,FrameY);
		printf("═");                                            //打印上横框
	}

你已经定义了全局的 int i。

ava
慢羊羊

2023-12-12

技术讨论社区