Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 合并if语句以设置值限制_C - Fatal编程技术网

C 合并if语句以设置值限制

C 合并if语句以设置值限制,c,C,我正在为我的计划创建一个战舰计划;该程序运行良好,但我试图确保当用户将坐标超出范围时,程序会说他们输入的坐标不正确。代码如下: #include <stdio.h> #include <stdlib.h> void startBoard(int board[][5]) { int line, column; for(line=0 ; line < 5 ; line++ ) for(column=0 ; colum

我正在为我的计划创建一个战舰计划;该程序运行良好,但我试图确保当用户将坐标超出范围时,程序会说他们输入的坐标不正确。代码如下:

    #include <stdio.h>
    #include <stdlib.h>

    void startBoard(int board[][5])
{
  int line, column;
    for(line=0 ; line < 5 ; line++ )
        for(column=0 ; column < 5 ; column++ )
            board[line][column]=-1;
 }

void showBoard(int board[][5])
{

int line, column;

    printf("\t1 \t2 \t3 \t4 \t5");
    printf("\n");

    for(line=0 ; line < 5 ; line++ ){
        printf("%d",line+1);
        for(column=0 ; column < 5 ; column++ ){
            if(board[line][column]==-1){
                printf("\t~");
            }else if(board[line][column]==0){
                printf("\t*");
            }else if(board[line][column]==1){
                printf("\tX");
            }

        }
        printf("\n");
    }

}

void startShips(int ships[][2]){
    srand(time(NULL));
    int ship, last;

    for(ship=0 ; ship < 3 ; ship++){
        ships[ship][0]= rand()%5;
        ships[ship][1]= rand()%5;
for(last=0 ; last < ship ; last++){
            if( (ships[ship][0] == ships[last][0])&&(ships[ship][1] == ships[last][1]) )
                do{
                    ships[ship][0]= rand()%5;
                    ships[ship][1]= rand()%5;
                }while( (ships[ship][0] == ships[last][0])&&(ships[ship][1] == ships[last][1]) );
        }

    }
}

void giveShot(int shot[2])
{

    printf("Line: ");
    scanf("%d",&shot[0]);
    shot[0]--;

    printf("Column: ");
    scanf("%d",&shot[1]);
    shot[1]--;

}

int hitship(int shot[2], int ships[][2])
{
    int ship;

    for(ship=0 ; ship < 3 ; ship++){
        if( shot[0]==ships[ship][0] && shot[1]==ships[ship][1]){
            printf("You hit a ship with the shot (%d,%d)\n",shot[0]+1,shot[1]+1);
            return 1;
        }
    }
    return 0;
}

void tip(int shot[2], int ships[][2], int attempt)
{
    int line=0,
        column=0,
        row;

    //count how many ships there is line/column
    for(row=0 ; row < 3 ; row++){
        if(ships[row][0]==shot[0])
            line++;
        if(ships[row][1]==shot[1])
            column++;
    }

    printf("\nDica %d: \nline %d -> %d ships\ncolumn %d -> %d ships\n",attempt,shot[0]+1,line,shot[1]+1,column);
 }

 void changeBoard(int shot[2], int ships[][2], int board[][5]){
    if(hitship(shot,ships))
        board[shot[0]][shot[1]]=1;
    else
        board[shot[0]][shot[1]]=0;
}

int main() {
    int board[5][5];
    int ships[3][2];
    int shot[2];
    int attempts=0,
        hits=0;

    startBoard(board);
    startShips(ships);

    printf("\n");

    do{
        showBoard(board);
        giveShot(shot);
        attempts++;

        if(hitship(shot,ships)){
            tip(shot,ships,attempts);
            hits++;
        }
        else
            tip(shot,ships,attempts);

        changeBoard(shot,ships,board);


    }while(hits!=3);

    printf("\n\n\nFinished game. You hit the three ships in %d attempts", attempts);
    showBoard(board);
}
#包括
#包括
无效起始板(内部板[][5])
{
int行、列;
用于(行=0;行<5;行++)
用于(列=0;列<5;列++)
板[行][列]=-1;
}
无效展示板(集成电路板[][5])
{
int行、列;
printf(“\t1\t2\t3\t4\t5”);
printf(“\n”);
用于(行=0;行<5;行++){
printf(“%d”,第+1行);
用于(列=0;列<5;列++){
if(板[行][列]=-1){
printf(“\t~”);
}else if(板[行][列]==0){
printf(“\t*”);
}else if(板[行][列]==1){
printf(“\tX”);
}
}
printf(“\n”);
}
}
无效启动船舶(国际船舶[][2]){
srand(时间(空));
国际船舶,最后;
对于(ship=0;ship<3;ship++){
ships[ship][0]=rand()%5;
ships[ship][1]=rand()%5;
对于(last=0;last%d ships\n列%d->%d ships\n”,尝试,快照[0]+1,行,快照[1]+1,列);
}
无效交换板(int-shot[2],int-ships[][2],int-board[][5]){
如果(命中(射击,发射))
板[shot[0]][shot[1]]=1;
其他的
板[shot[0]][shot[1]]=0;
}
int main(){
国际板[5][5];
国际船舶[3][2];
int-shot[2];
int=0,
点击率=0;
右舷(板);
startShips(船舶);
printf(“\n”);
做{
展板;
射门;
尝试++;
如果(命中(射击,发射)){
提示(射击、飞船、尝试);
hits++;
}
其他的
提示(射击、飞船、尝试);
配电盘(铅球、船舶、配电盘);
}while(点击次数=3次);
printf(“\n\n\n游戏结束。您在%d次尝试中击中了三艘船”,尝试);
展板;
}

我认为
while
语句比
if
更有用

首先要求用户输入值。然后,当用户输入不正确的值时,您会再次询问他

它可能是这样的:

printf("Line: ");
scanf("%d",&shot[0]);
while(shot[0]<lower_bound || shot[0]>upper_bound){
    printf("Incorrect entry");
    printf("Enter a correct Line: ");
    scanf("%d",&shot[0]);
}
shot[0]--;
printf(“行:”);
scanf(“%d”、&shot[0]);
while(shot[0]上限){
printf(“不正确输入”);
printf(“输入正确的行:”);
scanf(“%d”、&shot[0]);
}
射击[0]-;

如果你真的需要
If
,你可以用
If
更改
while
,但是那只会检查一次值,而while语句会一直检查直到你得到你需要的。

我认为
while
语句比
If
更有用

首先要求用户输入值。然后,当用户输入不正确的值时,您会再次询问他

它可能是这样的:

printf("Line: ");
scanf("%d",&shot[0]);
while(shot[0]<lower_bound || shot[0]>upper_bound){
    printf("Incorrect entry");
    printf("Enter a correct Line: ");
    scanf("%d",&shot[0]);
}
shot[0]--;
printf(“行:”);
scanf(“%d”、&shot[0]);
while(shot[0]上限){
printf(“不正确输入”);
printf(“输入正确的行:”);
scanf(“%d”、&shot[0]);
}
射击[0]-;

如果您确实需要
If
,您可以使用
If
更改
while
,但这只会检查一次值,而while语句会一直检查,直到您得到所需的值。

您尝试了什么?是什么阻止您在适当的位置插入
if
语句?您尝试了什么?是什么阻止您在适当的位置插入
if
语句?@megasxrl您觉得这个答案有用吗?有什么反馈吗?@megasxrl您觉得这个答案有用吗?有什么反馈吗?