首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迷你读心器

迷你读心器
EN

Code Review用户
提问于 2014-03-13 15:57:10
回答 1查看 1.8K关注 0票数 6

下面是一个猜测用户选择的数字的代码。我知道,使用后藤是一个不好的做法,但这似乎是不可避免的。

这是因为使用do while不起作用,例如:

代码语言:javascript
运行
复制
do{
   scanf("%c",&variable);
  }while(variable == 'a' || variable = 'b' || variable = 'c');

会接受所有字母,而我希望它只接受a、b和c,所以我认为使用if/elsegoto更好。

代码语言:javascript
运行
复制
#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;


}
EN

回答 1

Code Review用户

回答已采纳

发布于 2014-03-13 16:15:35

当你使用GOTO时,坏事就会发生.

with循环的问题是您使用的是=而不是== .您将这些值赋值给循环中的变量,它是成功的,因此接受所有字符.

请执行{ scanf("%c",& variable );}while(变量== 'a‘区的’x_x变量= 'b‘\x’\x= 'c');

修好它..。

代码语言:javascript
运行
复制
  do{
   scanf("%c",&variable);
  }while(variable == 'a' || variable == 'b' || variable == 'c');

编辑:

实际上,并发循环可能不是最好的,它需要更大的.考虑以下几点:

代码语言:javascript
运行
复制
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)
票数 11
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/44269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档