Хотя цикл для получения ввода, не работает правильно в C - PullRequest
1 голос
/ 26 января 2012

У меня проблема при использовании метода ввода пользователя, который позволяет проверять ввод.Мне требуется вернуть ввод после того, как он был проверен.

char* getvalidinputnumber(int length, char prompt[],int base)
    {
        char* user_input = calloc(length+1,sizeof(char));

        fflush(stdin);
        fflush(FILE *);

        /*Prompts & Gets the users input and saves it in user_input*/
        do {
            printf("\n %s", prompt); 
            fgets(user_input,length+1,stdin); 
            /*printf("\n##Entered %s : ", user_input);*/
        } while(!isnumeric(user_input,base) && strlen(user_input) != length);

        fflush(stdin); 
        return(user_input);
    }

При вызове этой функции в моем основном как ....

while (strcmp(user_input,"00000000") != 0)
{
    user_input = getvalidinputnumber(8, "Enter HEX Value",16);
}

Это также делает следующее ...

Введите значение HEX

Введите значение HEX

Дважды, а не один раз, и когда я ввожу шестнадцатеричное значениеон возвращает шестнадцатеричное значение правильно, но затем запускается дважды снова, когда я пытался использовать fflush, но, похоже, это не решает проблему.

Как я могу решить эту проблему или есть лучший способ получить ввод, например, с помощью scanf?

1 Ответ

2 голосов
/ 26 января 2012
fflush(stdin)

Вызывает неопределенное поведение! fflush() следует использовать только для потоков, открытых для вывода, а не для ввода.

...