do-while循环不会退出C
好的,我提前很抱歉,我知道有一千个do-while循环如何工作以及如何退出它们的例子。我发誓我已经尝试过。对于我来说,当用户输入0时,我不能让它退出。必须有一些我看起来很重要的东西。我是如何在else if循环中工作的,但主要的是在我之外。我将不胜感激任何帮助或方向。do-while循环不会退出C
int main()
{
char connectBoard[6][7];
int i , j;
char c;
int turn = 1;
char player1 = 'x';
char player2 = 'o';
int spot;
for(i = 0; i < 6; i++) //sets up 2D array board
{
for(j = 0; j < 7; j++)
{
c = '.';
connectBoard[i][j] = c;
}
}
for(i = 0; i < 6; i++)// prints out 2D array board
{
for(j = 0; j < 7; j++)
{
printf("%c", connectBoard[i][j]);
}
printf("\n");
}
printf("=======\n");
printf("1234567\n");
do{
if(turn%2 != 0) //player1 turn
{
for(i = 5; i < 6; i++)
{
for(j = 0; j < 1; j++)
{
printf(" Player %c, drop your piece in which column (1-7 or 0 to quit): ", player1);
scanf("%d", &spot);
j = spot - 1;
if(connectBoard[i][j] == '.')
{
connectBoard[i][j] = 'x';
}
else if(connectBoard[i][j] == 'x' || connectBoard[i][j] == 'o')
{
do
{
i--;
}while(connectBoard[i][j] == 'x' || connectBoard[i][j] == 'o');
connectBoard[i][j] = 'x';
if(i == -1)
{
printf("***Bad entry, try again: ");
scanf("%d", &spot);
j = spot - 1;
i = 5;
connectBoard[i][j] = 'x';
}
}
turn++;
}
break;
}
printf("\n");
for(i = 0; i < 6; i++)// prints out 2D array board
{
for(j = 0; j < 7; j++)
{
printf("%c", connectBoard[i][j]);
}
printf("\n");
}
printf("=======\n");
printf("1234567\n");
}
if(turn%2 == 0) //player2 turn
{
for(i = 5; i < 6; i++)
{
for(j = 0; j < 1; j++)
{
printf(" Player %c, drop your piece in which column (1-7 or 0 to quit): ", player2);
scanf("%d", &spot);
j = spot - 1;
if(connectBoard[i][j] == '.')
{
connectBoard[i][j] = 'o';
}
else if(connectBoard[i][j] == 'x' || connectBoard[i][j] == 'o')
{
do
{
i--;
}while(connectBoard[i][j] == 'x' || connectBoard[i][j] == 'o');
connectBoard[i][j] = 'o';
if(i == -1)
{
printf("***Bad entry, try again: ");
scanf("%d", &spot);
j = spot - 1;
i = 5;
connectBoard[i][j] = 'o';
}
}
turn++;
}
break;
}
printf("\n");
for(i = 0; i < 6; i++)// prints out 2D array board
{
for(j = 0; j < 7; j++)
{
printf("%c", connectBoard[i][j]);
}
printf("\n");
}
printf("=======\n");
printf("1234567\n");
}
}while(spot != 0);
return 0;
}
阅读当场变量之后,您可以检查是否值是0,并打破:
printf(" Player %c, drop your piece in which column (1-7 or 0 to quit): ", player2);
scanf("%d", &spot);
if (spot == 0)
return 1;
j = spot - 1;
,改变你做,而while循环,以避免混乱。
啊是的,在这种情况下,我们可以退出。 – user5478656
仅对该循环使用变量。你在循环中使用spot来做其他事情,只用于while循环的目的。
然后,你知道do/while和while之间的区别吗?我不太了解你的程序,但是如果你正在读一个地方,你可以在开始时在循环之外读取它,然后用一个while循环来检查它。它是一样的,但也许它更容易为你。
你为什么使用spot作while循环。按照C语言,它存储垃圾值。
即使您使用,请不要为它设置值。请检查基本的C变量声明。
主要是对的,但在这个特定的情况下,循环是一个'do-while',所以'spot'由内部循环引入。 – LPs
为什么要这样做? 使用一个简单而在一个函数中做一个返回或休息。 在我看来尽量避免尽量避免。 请停止使用这样的printf,这是awfull,缓冲等....阅读printf man :) – pix
'j = spot-1;'当'spot'为'0'时,解决了矩阵越界的问题,所以[ UB](https://en.wikipedia.org/wiki/Undefined_behavior)。 – LPs
顺便说一句,要求“0”退出的'printf'在一个double for循环中。您必须退出以杀死外部while循环。 – LPs