gpt4 book ai didi

c++ - 错误 : Innitializer-string for array of chars is too long c++

转载 作者:行者123 更新时间:2023-11-28 06:36:06 25 4
gpt4 key购买 nike

每次我尝试编译程序时,它都会产生一个错误,指出字符数组中的字符太多。

char map[10][10] = { "##########",
"#@ #",
"# #",
"######## #",
"# # #",
"# # # # #",
"#+# # # #",
"## # # #",
"# # #",
"#!########" };

这个程序是我们在计算机科学课上做的类似角色扮演游戏的小游戏,但我无法找出错误。

整个程序在这里:

    #include <iostream>
#include <windows.h>

using namespace std;

void Display(); //creates display function




bool stopGame = false;
int gamespeed = 100, hp = 100, maxHP = 100, XAmount = 9, YAmount = 9;

char map[10][10] = { "##########", //creates game map
"#@ #",
"# #",
"######## #",
"# # #",
"# # # # #",
"#+# # # #",
"## # # #",
"# # #",
"#!########" };





int main()
{

Display(); //runs display function
return 0;
}

void Display()
{
while(stopGame == false)
{

Sleep(gamespeed); //sets a gamespeed
system("cls"); //clears screen

for(int posY = 0; posY <= YAmount; posY++) //prints game map to screen
{
cout << map[posY] << endl;
}

for(int posY = 0; posY <= YAmount; posY++) //gets y position
{

for(int posX = 0; posX <= XAmount; posX++) //gets x position
{

switch(map[posY][posX])
{

case '@':
{



if(GetAsyncKeyState(VK_UP) != 0) //up movement
{
int y = (posY-1);
switch(map[y][posX])
{

case ' ':
{
map[posY][posX] = ' ';
posY -= 1;
map[y][posX] = '@';

}break;
case '+':
{
map[posY][posX] = 3;
map[posY][posX] = ' ';
posY -= 1;
map[y][posX] = '@';

}break;


}


}


if(GetAsyncKeyState(VK_DOWN) != 0) //down movement
{

int y2 = (posY+1);
switch(map[y2][posX])
{

case ' ':
{

map[posY][posX] = ' ';
posY += 1;
map[y2][posX] = '@';

}break;
case '+':
{
map[posY][posX] = 3;
map[posY][posX] = ' ';
posY += 1;
map[y2][posX] = '@';

}break;

}

}

if(GetAsyncKeyState(VK_LEFT) != 0) //move left
{

int x = (posX-1);
switch(map[posY][x])
{

case ' ':
{

map[posY][posX] = ' ';
posX -= 1;
map[posY][x] = '@';

}break;
case '+':
{
map[posY][posX] = 176;
map[posY][posX] = ' ';
posX += 1;
map[posY][x] = '@';

}break;

}

}

if(GetAsyncKeyState(VK_RIGHT) != 0) //move right
{

int x2 = (posX+1);
switch(map[posY][x2])
{

case ' ':
{

map[posY][posX] = ' ';
posX += 1;
map[posY][x2] = '@';

}break;

case '+':
{
map[posY][posX] = 3;
map[posY][posX] = ' ';
posX += 1;
map[posY][x2] = '@';

}break;



}

}


}break;

case '#': //sets ascii skin
{
map[posY][posX] = 219;
}break;
case '+': //sets ascii skin
{
map[posY][posX] = 3;
}



}

}

}

}

}

如果有人能提供帮助那就太好了。

最佳答案

不幸的是,在 C++ 中,您不能从长度为 10 的字符串文字中初始化长度为 10 的字符数组。

一个简单的解决方法是将其设置为 11,例如char tap[10][11] =

此修复程序还将产生 cout << map[posY] << endl; 的效果工作 。 (目前这会导致缓冲区溢出并搞砸你的显示)。

关于c++ - 错误 : Innitializer-string for array of chars is too long c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com