Tôi đang tạo một chương trình tàu chiến cho chương trình của mình; chương trình đang hoạt động tốt, nhưng tôi đang cố gắng đảm bảo rằng khi người dùng đặt tọa độ ngoài phạm vi, chương trình cho biết họ đã nhập tọa độ không chính xác. Đây là mã:
#include
#include
void startBoard(int board[][5])
{
int dòng, cột;
for(line=0; line < 5; line++)
for(cột=0; cột < 5; cột++)
bảng[dòng][cột]=-1;
}
void showBoard(int board[][5])
{
int dòng, cột;
printf("\t1 \t2 \t3 \t4 \t5");
printf("\n");
for(line=0; line < 5; line++){
printf("%d",line+1);
for(cột=0; cột < 5; cột++){
if(bảng[dòng][cột]==-1){
printf("\t~");
}else if(bảng[dòng][cột]==0){
printf("\t*");
}else if(bảng[dòng][cột]==1){
printf("\tX");
}
}
printf("\n");
}
}
void startShips(int tàu[][2]){
srand(thời gian(NULL));
int tàu, cuối cùng;
for(ship=0; tàu < 3; tàu++){
tàu[ship][0]= rand()%5;
tàu[ship][1]= rand()%5;
for(last=0; cuối cùng < tàu; cuối cùng++){
if( (ships[ship][0] ==ships[last][0])&&(ships[ship][1] ==ships[last][1]) )
LÀM{
tàu[ship][0]= rand()%5;
tàu[ship][1]= rand()%5;
}while( (ships[ship][0] ==ships[last][0])&&(ships[ship][1] ==ships[last][1]) );
}
}
}
void GiveShot(int shot[2])
{
printf("Dòng: ");
scanf("%d",&shot[0]);
shot[0]--;
printf("Cột: ");
scanf("%d",&shot[1]);
bắn[1]--;
}
int hitship(int shot[2], intship[][2])
{
int tàu;
for(ship=0; tàu < 3; tàu++){
if( shot[0]==ships[ship][0] && shot[1]==ships[ship][1]){
printf("Bạn bắn trúng một con tàu (%d,%d)\n",shot[0]+1,shot[1]+1);
return 1;
}
}
return 0;
}
void tip(int shot[2], intship[][2], int try)
{
dòng int=0,
cột=0,
hàng ngang;
//đếm xem có bao nhiêu tàu có dòng/cột
for(row=0; row < 3; row++){
if(ships[row][0]==shot[0])
dòng++;
if(ships[row][1]==shot[1])
cột++;
}
printf("\nDica %d: \nline %d -> %d tàu\ncolumn %d -> %d tàu\n",attempt,shot[0]+1,line,shot[1]+1,column) ;
}
void ChangeBoard(int shot[2], intship[][2], int board[][5]){
if(hitship(bắn,tàu))
bảng[bắn[0]][bắn[1]]=1;
khác
bảng[bắn[0]][bắn[1]]=0;
}
int chính() {
bảng int[5] [5];
int tàu[3][2];
int shot[2];
int lần thử = 0,
lượt truy cập=0;
startBoard(bảng);
startShips(tàu);
printf("\n");
LÀM{
showBoard(bảng);
choShot(bắn);
cố gắng++;
if(hitship(bắn,tàu)){
tip(bắn, tàu, nỗ lực);
lượt truy cập++;
}
khác
tip(bắn, tàu, nỗ lực);
ChangeBoard(bắn,tàu,biển);
}while(lần truy cập!=3);
printf("\n\n\nTrò chơi đã kết thúc. Bạn bắn trúng ba con tàu trong %d lần thử", lần thử);
showBoard(bảng);
}
我认为 while
tỷ lệ tuyên bố nếu như
Hữu ích hơn.
Đầu tiên yêu cầu người dùng nhập một giá trị. Sau đó, khi người dùng nhập sai giá trị, bạn tiếp tục hỏi anh ta.
Nó có thể trông như thế này:
printf("Dòng: ");
scanf("%d",&shot[0]);
while(shot[0]upper_bound){
printf("Nhập sai");
printf("Nhập đúng dòng: ");
scanf("%d",&shot[0]);
}
shot[0]--;
nếu bạn thực sự cần nếu như
, bạn có thể chuyển đổi while
Thay đổi thành nếu như
, nhưng điều này chỉ kiểm tra giá trị một lần, trong khi câu lệnh while tiếp tục kiểm tra cho đến khi bạn nhận được thứ mình cần.
Tôi là một lập trình viên xuất sắc, rất giỏi!