Как мне решить эту проблему с невозможностью получить оператор ввода (myflu sh) в кодировке "угадывание случайных чисел" в C - PullRequest
0 голосов
/ 07 января 2020

Я пытался выйти за рамки простого угадывания случайных чисел. По сути, программа должна быть сделана так, чтобы она выглядела так:

insert a number : 70
bigger than 0 smaller than 70.
insert a number : 35
bigger than 35 smaller than 70.
insert a number : 55
bigger than 55 smaller than 70.
insert a number : 60
bigger than 55 smaller than 60.
insert a number : 57
You got it right on your 5th try!

У меня были некоторые проблемы, но уже благодаря блестящим людям в stackoverflow, я могу получить все результаты, которые у меня есть sh, но с осталась одна проблема.

Я изменил и вроде разработал его, и все работало, кроме случаев, когда я вставляю число, выходящее за пределы диапазона 1 ~ 100, в начале это работает, и следующая строка будет снова спросить insert a number, как написано в коде блока input.

Однако, начиная со второго номера вставки, если я вставлю число вне диапазона, он не сможет определить, находится ли число вне диапазона, и просто напечатает это число.

insert a number : 1000
insert a number : -90
insert a number : 101
insert a number : 70
bigger than 0 smaller than 70.
insert a number : 35
bigger than 35 smaller than 70.
insert a number : 1000
insert a number : 

, где, как это должно произойти, на самом деле происходит следующее:

insert a number : 1000
insert a number : 200
insert a number : 70
bigger than 0 smaller than 70.
insert a number : 2000
bigger than 0 smaller than 2000.

Может ли кто-нибудь дать мне несколько советов о том, как решить эту проблему? Я догадываюсь, что проблема в том, что output не может получить то, что делает input, но я не уверен ...

Ниже приведен код с текущим проблема.

#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#pragma warning (disable : 4996)

int input();
int random(int);
void myflush();
int output(int, int);

int main()
{
    int num;
    int i;
    int ran;
    int count = 0;

    srand((unsigned int)time(NULL));
    i = 0;
    while (i < 1) {
        ran = 1 + random(101);  // random number 1~101
        ++i;
    }

    num = input();
    count = output(ran, num);

    printf("You got it right on your %d try!", count);

    return 0;
}



int input()
{
    int num;
    printf("insert a number : ");
    scanf("%d", &num);
    while (num < 1 || num > 100 || getchar() != '\n') {
        myflush();
        printf("insert a number : ");
        scanf("%d", &num);
    }
    return num;
}


int random(int n)
{
    int res;
    res = rand() % n;
    return res;
}


void myflush()
{
    while (getchar() != '\n') {
        ;
    }
    return;
}


int output(int ran, int num) {
    int count = 0;
    int large = 100;
    int small = 0;
    while (1) {
        if (num != ran) {
            count++;
            if (num < ran) {
                small = num;
                printf("bigger than %d and smaller than %d\n", small, large);
            }
            else if (num > ran) {
                large = num;
                printf("bigger than %d and smaller than %d\n", small, large);
            }
            printf("insert a number : ");
            scanf("%d", &num);
        }
        else {
            count++;
            break;
        }
    }
    return count;
}
...