C 程序打印与我为其生成的坐标不同的坐标
基本上,我需要我的程序将我手动输入的点放置在网格上(这样做很好),然后在同一网格上随机放置一个点,并根据用户请求重复多次。目前,我的代码打印计算机选择的数字,但直到我键入另一个数字并按enter键后才将它们放在网格上,然后将其放在一个看似随机的位置。 这是我的密码C 程序打印与我为其生成的坐标不同的坐标,c,random,coordinates,C,Random,Coordinates,基本上,我需要我的程序将我手动输入的点放置在网格上(这样做很好),然后在同一网格上随机放置一个点,并根据用户请求重复多次。目前,我的代码打印计算机选择的数字,但直到我键入另一个数字并按enter键后才将它们放在网格上,然后将其放在一个看似随机的位置。 这是我的密码 void placeCShip(){ int a,b; srand(time(NULL)); a = printf("%d\n", rand()%15); b = printf("%d\n", rand
void placeCShip(){
int a,b;
srand(time(NULL));
a = printf("%d\n", rand()%15);
b = printf("%d\n", rand()%15);
scanf("%d, %d", &a, &b);
if (grid[a][b] == SEA, grid[a][b] != PSHIP){
grid[a][b] = CSHIP;
}
}
这是重复它的函数,当我排除CShips时,它工作得很好,当我包含它时,Pships仍然工作,但是CShips不能给出正确的坐标
void placePShips(){
int i,fleetSize;
printf("\nEnter fleet size : ");
scanf("%d", &fleetSize);
for(i=0;i<fleetSize;i++){
placePShip();
placeCShip();
printGrid();
}
}
void placePShips(){
int i,车队规模;
printf(“\n输入车队大小:”);
scanf(“%d”、&fleetSize);
对于(i=0;i简短回答:您有不需要的“scanf”呼叫,这将
<代码>混合IO和打字。考虑在使用之前检查每个函数的每个页面。还要注意编译器警告,因为这样可以节省大量调试时间。
从PlaceChip开始:
void placeCShip(){
// Loop until unused location is found.
while ( 1 ) {
int a=rand()%15 ;
int b=rand()%10 ;
// MOVE to 'main': srand(time(NULL));
if (grid[a][b] == SEA){
grid[a][b] = CSHIP;
break ;
}
}
}
玩家游艇,考虑切换到FDES/sSCANF。'ScNFF '将使你进入解析错误的无限循环。
void placePShip(){
// Loop until valid coordinates are entered.
while ( 1 ) {
int x,y;
printf("\nEnter Ship location: x , y: ");
scanf("%d , %d", &x, &y);
if (grid[y][x] == SEA){
grid[y][x] = PSHIP;
break ;
}
}
}
您的代码中有更多未显示的对scanf()
的调用。请在这里输入一个.What isSEA,
?…我希望使用&&
或|
而不是条件中两个检查之间的逗号。@Yunnosch在那里添加了完整的代码,现在应该可以看到所有内容:)@Yunnosch它现在工作正常,除了每次我输入坐标或车队大小时,我必须键入一个字符并输入它以移动到下一行/代码段;关于调用srand()
。该函数应该只调用一次,最好在main()
函数的开头
void placePShip(){
// Loop until valid coordinates are entered.
while ( 1 ) {
int x,y;
printf("\nEnter Ship location: x , y: ");
scanf("%d , %d", &x, &y);
if (grid[y][x] == SEA){
grid[y][x] = PSHIP;
break ;
}
}
}