在我的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";