Как распечатать Invalid для писем - PullRequest
0 голосов
/ 27 декабря 2018

Как печатать недействительно, когда кто-то вводит большие или маленькие буквы, потому что предположительно они вводят только числа с плавающей точкой от 0 до 10.

Я пытался кодировать как это

Это пошло не так.

#include<stdio.h>


int main()
{
    int trial=0;
    float judge1=0,judge2,judge3,judge4,judge5;
    char a;

    printf("\n%90s","Welcome to the constentant score calculator program :)");

    printf("\n\n\n\n\n\rKindly enter the constentant score by 5 respected 
 judges:");

    do
    {
        printf("\n\nScore by JUDGE 1 (0-10):\t");
        scanf("%f",&judge1);

         if ((judge1>-1)&& (judge1<11) )
             printf("The constentant got %.2f from the judge",judge1);
         else
            printf("\aPlease input a valid score between 0 and 10:");
     } while ((judge1<0) || (judge1>10)||(judge1=a>96) && (judge1=a<123)|| 
 (judge1=a<91) && (judge1=a>64));
}

хорошо, это мой второй код

#include<stdio.h>

int main()
{
    float judge1;

    printf("\n%90s","Welcome to the constentant score calculator program :)");

    printf("\n\n\n\n\n\rKindly enter the constentant score by 5 respected 
judges:");

    printf("\n\nScore by JUDGE 1 (0-10):\t");
    scanf("%f",&judge1);

    if ((judge1>-1) && (judge1<11))
      printf("The constentant got %.2f from the judge",judge1);
    else
        printf("\aPlease input a valid score between 0 and 10:");
    }
}

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Проблема в том, что в потоке застрял плохой персонаж.Решение здесь: Сбой Scanf почему? .Джон Боде предлагает использовать getchar, чтобы получить его.Также примените предложенную проверку mnistic, и она должна работать.

она ничего не предлагает и только портит большую картину.

0 голосов
/ 27 декабря 2018

Когда вы используете "%f" в качестве строки формата для scanf, он будет читать только те символы, которые допустимы для типа с плавающей запятой, и прекратит чтение, если обнаружит какие-либо другие символы.Поэтому, если кто-то наберет «abc», ничего не будет записано в judge1, и эти символы останутся во входном буфере для повторного чтения.Затем вы застрянете в бесконечном цикле чтения тех же символов.

Кроме того, это выражение не имеет смысла:

judge1=a>96

> имеет более высокий приоритет, чем ==, таким образом, это эквивалентно:

judge1=(a>96)

При условии, что a присвоено значение, a>96 сравнивает это значение с 96 и оценивает либо 0, либо 1. Затем вы присваиваете это значение judge1перезаписывая прочитанное пользователем.Предполагая, что вы хотели использовать ==, это тоже не имеет смысла.В этом случае judge1==0 или judge1==1 оценивается в зависимости от результата a>96.Таким образом, приведенное выше выражение будет истинным, только если judge1 равно 1 и a больше 96 или judge1 равно 0 и a меньше или равно 96.

Другая проблема заключается в том, чтоa никогда не присваивается значение.Похоже, у вас сложилось впечатление, что при вызове scanf("%f",&judge1); первый прочитанный символ записывается в a.Нет ссылки, которая вызывает это, поэтому a остается неинициализированным.

Вместо этого вы хотите прочитать строку текста, используя fgets, а затем strtof, чтобы прочитатьfloat.Функция strtof принимает адрес указателя в качестве второго параметра, чтобы сообщить вам, где в строке остановлен синтаксический анализ.Так что, если этот указатель не указывает на нулевой терминатор в конце строки (или на символ новой строки, так как fgets читает и сохраняет символ новой строки), то вы знаете, что прочитали символ не с плавающей запятой.

float judge1;
char line[100];
char *p;
int invalid_input;

do {
    invalid_input = 0;
    fgets(line, sizeof(line), stdin);
    errno = 0;
    judge1 = strtof(line, &p);
    if (errno || ((*p != 0) && (*p != '\n')) || (judge1 < 0) || (judge1 > 10)) {
        printf("Please input a valid score between 0 and 10:");
        invalid_input = 1;
    } else {
        printf("The constentant got %.2f from the judge\n ",judge1);
    }
} while (invalid_input);
0 голосов
/ 27 декабря 2018

Сначала проверьте возвращаемое значение scanf.Если он не соответствует элементу, он вернет 0.Затем вы можете проверить, находится ли введенный номер в пределах:

int r, judge1;
...
r = scanf("%d", &judge1);
if(r != 1)
{
    printf("invalid input\n");
    while((r = fgetc(stdin)) != EOF && r != '\n');
}
else if((judge1 < 0) || (judge1 > 10))
    printf("input out of range\n");
else
    printf("valid input\n");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...