下面是一个猜测用户选择的数字的代码。我知道,使用后藤是一个不好的做法,但这似乎是不可避免的。
这是因为使用do while
不起作用,例如:
do{
scanf("%c",&variable);
}while(variable == 'a' || variable = 'b' || variable = 'c');
会接受所有字母,而我希望它只接受a、b和c,所以我认为使用if/else
和goto
更好。
#include <stdio.h>
#include <time.h>
void sleep(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
int main()
{
int guess;
int tries=0;
char answer;
answer='y';
int min =0;
int max = 101;
int avg;
int a =0;
int i,j;
puts("pick a number between 1 and 100");
puts("if the number is higher than the guess press h");
puts("if it is less than the guess press l ");
puts("if my guess is correct press y");
for(i=0; (i< 8); i++)
{
sleep(600);
avg = (min + max)/2;
if(!avg)
break;
printf("is it %d\?\n", avg );
fff:
answer = getchar();
if(answer == 'y')
{
a++;
break;
}
else if(answer == 'h')
{
min = avg;
}
else if(answer == 'l')
{
max = avg;
}
else
goto fff;
}
int sol = rand() % 4 + 1;
if(a)
{
switch(sol)
{
case 2: puts("You are not good enough to beat me, human");
break;
case 3: puts("Stop wasting my time, your numbers are so easy to guess");
break;
case 4: puts("Next");
break;
//case 1:
default:
printf("That was easy your number is : %d ", avg);
break;
}
}
else
{
xa:
switch(sol)
{
case 2:
puts("Are you sure about this number");
break;
case 3: puts("I don't support imaginary numbers");
break;
case 4: puts("Stop playing with me");
break;
//case 1:
default:
puts("I think there is no such number");
}
}
sleep(2000);
getchar();
return 0;
}
发布于 2014-03-13 16:15:35
当你使用GOTO时,坏事就会发生.
with循环的问题是您使用的是=
而不是==
.您将这些值赋值给循环中的变量,它是成功的,因此接受所有字符.
请执行{ scanf("%c",& variable );}while(变量== 'a‘区的’x_x变量= 'b‘\x’\x= 'c');
修好它..。
do{
scanf("%c",&variable);
}while(variable == 'a' || variable == 'b' || variable == 'c');
实际上,并发循环可能不是最好的,它需要更大的.考虑以下几点:
int ok = 1;
do
{
printf("is it %d\?\n", avg );
answer = getchar();
if(answer == 'y')
{
a++;
ok = 1;
break;
}
else if(answer == 'h')
{
ok = 1;
min = avg;
}
else if(answer == 'l')
{
ok = 1;
max = avg;
}
else
{
ok = 0;
printf("Illegal input %c\n", answer);
}
} while (!ok)
https://codereview.stackexchange.com/questions/44269
复制相似问题