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您觉得这个答案有用吗?有什么反馈吗?