在我的C战舰程序中放置战舰有问题吗
我已经为此挣扎了大约两个小时了。出于某种原因,字符不是放在构成我的棋盘的~上,而是放在随机点上,而不是我输入的坐标。希望有人能帮我指引正确的方向在我的C战舰程序中放置战舰有问题吗,c,C,我已经为此挣扎了大约两个小时了。出于某种原因,字符不是放在构成我的棋盘的~上,而是放在随机点上,而不是我输入的坐标。希望有人能帮我指引正确的方向 void place_ships(int board[ROWS][COLS]) { int ship_type = 1, ship_length = 0, row = 0, col = 0, direction = 0, count = 0; for (ship_type = 1; ship_type < 6; ship_ty
void place_ships(int board[ROWS][COLS])
{
int ship_type = 1, ship_length = 0, row = 0, col = 0, direction = 0, count = 0;
for (ship_type = 1; ship_type < 6; ship_type++)
{
if (ship_type == 1)
{
printf("Please enter where you would like to place your Carrier (5 spots).\n\n");
ship_length = 5;
}
else if (ship_type == 2)
{
printf("Please enter where you would like to place your Battleship (4 spots).\n\n");
ship_length = 4;
}
else if (ship_type == 3)
{
printf("Please enter where you would like to place your Submarine (3 spots).\n\n");
ship_length = 3;
}
else if (ship_type == 4)
{
printf("Please enter where you would like to place your Cruiser (3 spots).\n\n");
ship_length = 3;
}
else if (ship_type == 5)
{
printf("Please enter where you would like to place your Destroyer (2 spots).\n\n");
ship_length = 2;
}
printf("Choose the direction of your ship. (0 is vertical, 1 is horizontal)\n\n");
scanf("%d",&direction);
printf("Please choose ROW number.\n");
scanf("%d",&row);
printf("Please choose COLUMN number.\n");
scanf("%d",&col);
if (direction == 0)
{
for (count = 0; count < ship_length; count++)
{
if (ship_type == 1)
{
board[row+count][col] = 'c';
print_board (board, row, col);
}
else if (ship_type == 2)
{
board[row+count][col] = 'b';
}
else if (ship_type == 3)
{
board[row+count][col] = 's';
}
else if (ship_type == 4)
{
board[row+count][col] = 'r';
}
else if (ship_type == 5)
{
board[row+count][col] = 'd';
}
}
}
if (direction == 1)
{
for (count = 0; count < ship_length; count++)
{
if (ship_type == 1)
{
board[row][col+count] = 'c';
}
else if (ship_type == 2)
{
board[row][col+count] = 'b';
}
else if (ship_type == 3)
{
board[row][col+count] = 's';
}
else if (ship_type == 4)
{
board[row][col+count] = 'r';
}
else if(ship_type == 5)
{
board[row][col+count] = 'd';
}
}
}
}
}
void place\u ships(整板[行][COLS])
{
int ship_type=1,ship_length=0,row=0,col=0,direction=0,count=0;
对于(船舶类型=1;船舶类型<6;船舶类型++)
{
如果(船舶类型==1)
{
printf(“请输入您希望放置载体的位置(5个点)。\n\n”);
船舶长度=5;
}
否则如果(船舶类型==2)
{
printf(“请输入您想要放置战列舰的位置(4个位置)。\n\n”);
船舶长度=4;
}
否则如果(船舶类型==3)
{
printf(“请输入您想要放置潜艇的位置(3个位置)。\n\n”);
船舶长度=3;
}
否则如果(船舶类型==4)
{
printf(“请输入您想要放置巡洋舰的位置(3个位置)。\n\n”);
船舶长度=3;
}
否则如果(船舶类型==5)
{
printf(“请输入您想要放置驱逐舰的位置(2个点)。\n\n”);
船舶长度=2;
}
printf(“选择船的方向。(0是垂直的,1是水平的)\n\n”);
扫描频率(“%d”,方向(&d);
printf(“请选择行编号。\n”);
scanf(“%d”行和第行);
printf(“请选择列号。\n”);
scanf(“%d”列和列);
如果(方向==0)
{
用于(计数=0;计数<装运长度;计数++)
{
如果(船舶类型==1)
{
板[行+计数][col]=“c”;
打印板(板、行、列);
}
否则如果(船舶类型==2)
{
板[行+计数][列]=“b”;
}
否则如果(船舶类型==3)
{
板[行+计数][col]=“s”;
}
否则如果(船舶类型==4)
{
线路板[行+计数][col]=“r”;
}
否则如果(船舶类型==5)
{
板[行+计数][col]=“d”;
}
}
}
如果(方向==1)
{
用于(计数=0;计数<装运长度;计数++)
{
如果(船舶类型==1)
{
板[行][列+计数]='c';
}
否则如果(船舶类型==2)
{
板[行][列+计数]=“b”;
}
否则如果(船舶类型==3)
{
板[行][列+计数]=“s”;
}
否则如果(船舶类型==4)
{
板[行][列+计数]=“r”;
}
否则如果(船舶类型==5)
{
板[行][列+计数]=“d”;
}
}
}
}
}
印制板的功能是:
void print_board (char board[ROWS][COLS], int num_rows, int num_cols)
{
int row_index = 0, col_index = 0;
for (row_index = 0; row_index < num_rows; row_index++)
{
for (col_index = 0; col_index < num_cols; col_index++)
{
printf ("%c ", board[row_index][col_index]);
}
putchar ('\n');
}
}
void打印板(字符板[行][COLS],整数行,整数列)
{
int行索引=0,列索引=0;
对于(行索引=0;行索引
好吧,这就是我把它改成的。我需要在标题中定义结构吗?我又是一个大初学者
void place_ships(int board[ROWS][COLS])
{
int ship_type = 0, ship_length = 0, row = 0, col = 0, direction = 0, count = 0;
char * typestr[] = { "Ship type 0", "Carrier", "Battleship", "Submarine", "Cruiser", "Destroyer" };
char* tag = "0cbsrd";
for (ship_type = 0; ship_type < 6; ship_type++)
{
ship_length = 7 - ship_type;
prinf("Please enter where you would like to place %s (%s) spots).\n\n",typstr[ship_type], ship_length);
printf("Choose the direction of your ship. (0 is vertical, 1 is horizontal)\n\n");
scanf("%d",&direction);
printf("Please choose ROW number.\n");
scanf("%d",&row);
printf("Please choose COLUMN number.\n");
scanf("%d",&col);
if (direction == 0)
{
board[row+count][col] = tag[ship_type];
}
else
{
board[row][col+count] = tag[ship_type];
}
}
}
void place\u ships(整板[行][COLS])
{
int ship_type=0,ship_length=0,row=0,col=0,direction=0,count=0;
char*typestr[]={“0型舰”、“航母”、“战列舰”、“潜艇”、“巡洋舰”、“驱逐舰”};
char*tag=“0cbsrd”;
对于(船舶类型=0;船舶类型<6;船舶类型++)
{
船舶长度=7-船舶类型;
prinf(“请输入要放置%s(%s)点的位置)。\n\n”,typstr[装运类型],装运长度);
printf(“选择船的方向。(0是垂直的,1是水平的)\n\n”);
扫描频率(“%d”,方向(&d);
printf(“请选择行编号。\n”);
scanf(“%d”行和第行);
printf(“请选择列号。\n”);
scanf(“%d”列和列);
如果(方向==0)
{
板[行+计数][列]=标签[船型];
}
其他的
{
板[行][列+计数]=标签[船型];
}
}
}
一个简单的switch语句,而不是if-else列表:
switch (ship_type)
{
case 1:
board[row+count][col] = 'c';
break;
case 2:
board[row+count][col] = 'b';
break;
case 3:
board[row+count][col] = 's';
break;
case 4:
board[row+count][col] = 'r';
break;
case 5:
board[row+count][col] = 'd';
break;
}
实际上,更好的解决方案可能是这样的:
char ship_symbols[] = { 'c', 'b', 's', 'r', 'd' };
board[row+count][col] = ship_symbols[ship_type - 1]; /* -1 because array indexes start at 0 */
一个简单的switch语句,而不是if-else列表:
switch (ship_type)
{
case 1:
board[row+count][col] = 'c';
break;
case 2:
board[row+count][col] = 'b';
break;
case 3:
board[row+count][col] = 's';
break;
case 4:
board[row+count][col] = 'r';
break;
case 5:
board[row+count][col] = 'd';
break;
}
实际上,更好的解决方案可能是这样的:
char ship_symbols[] = { 'c', 'b', 's', 'r', 'd' };
board[row+count][col] = ship_symbols[ship_type - 1]; /* -1 because array indexes start at 0 */
我发现一些潜在的问题可能会让你陷入困境: scanf有点棘手,因为它还会将换行符留在缓冲区中
if (ship_type == 1)
{
printf("Please enter where you would like to place your Carrier (5 spots).\n\n");
ship_length = 5;
}
...
else if (ship_type == 5)
{
printf("Please enter where you would like to place your Destroyer (2 spots).\n\n");
ship_length = 2;
}
ship_length = 7 - ship_type;
printf("Please enter where you would like to place your %s (%s spots).\n\n", typestr[ship_type], ship_length);
char * typestr[] = { "Ship type 0", "Carrier", "Battleship", "Submarine", "Cruiser", "Destroyer" };
if (ship_type == 1)
{
board[row+count][col] = 'c';
print_board (board, row, col);
}
...
if (direction == 0) {
board[row+count][col] = tag[ship_type];
} else {
board[row][col+count] = tag[ship_type];
}
print_board (board, row, col);
char* tag = "0cbsrd";