Программа, которая проверяет на правильность пример на C

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

43␣/␣34␣=␣9.3↵
2␣**␣3␣=␣6↵
9␣/␣3␣=␣3↵
↵

Ожидаемый вывод :

WRONG↵
ERROR↵
OK↵

А программа выводит:

WRONG↵
WRONG↵
WRONG↵
WRONG↵
WRONG↵
WRONG↵
WRONG↵

и так до бесконечности...

Условие не допускает такого как в вводе: **.

Код выглядит так:

#include <stdio.h>
int main() {
    float cis1 = 0, cis2 = 0, cis3 = 0, rovn = 0;
    char diya;
    int check;
    while (1) {
    repeat:
        check = scanf("%f %c %f = %f", &cis1, &diya, &cis2, &cis3);
        if (check == EOF) break;
        if (diya == '+') {
            rovn = cis1 + cis2;
            if (rovn == cis3) {
                printf("OK\n");
                goto repeat;
            }
            else {
                printf("WRONG\n");
                goto repeat;
            }
        }
        if (diya == '-') {
            rovn = cis1 - cis2;
            if (rovn == cis3) {
                printf("OK\n");
                goto repeat;
            }
            else {
                printf("WRONG\n");
                goto repeat;
            }
        }
        if (diya == '*') {
            rovn = cis1 * cis2;
            if (rovn == cis3) {
                printf("OK\n");
                goto repeat;
            }
            else {
                printf("WRONG\n");
                goto repeat;
            }
        }
        if (diya == '/') {
            rovn = cis1 / cis2;
            if (cis1 == 3 && cis2 == 45) {
                printf("OK\n");
                goto repeat;
            }
            if (rovn == cis3) {
                printf("OK\n");
                goto repeat;
            }
            else {
                printf("WRONG\n");
                goto repeat;
            }
        }
        if (diya != '+' || diya != '-' || diya != '*' || diya != '/') {
            printf("ERROR\n");
            return 0;
        }
    }
    return 0;
}

Ответы (1 шт):

Автор решения: EOF

Вам нужно проверять check не только на EOF, но и на количество прочитаных элементов. Ёще в последнем if-е вместо операции || нужно использовать &&. И в конце очищайте входной буфер от мусора, который мог остаться после неудачного чтения. Кстати, старайтесь не использовать goto. Тем более, в Вашем случае можно спокойно обойтись без него.
Вот (неидеальная) реализация:

#include <stdio.h>

int main(void)
{
    float cis1 = 0, cis2 = 0, cis3 = 0, rovn = 0;
    char diya;
    int check;
    while (1)
    {
        check = scanf("%f %c %f = %f", &cis1, &diya, &cis2, &cis3);
        if (check == EOF) 
            break;
        else if (check != 4)
        {
            printf("ERROR\n");
        }
        else
        {
            if (diya == '+')
            {
                rovn = cis1 + cis2;
                if (rovn == cis3) {
                    printf("OK\n");
                }
                else
                {
                    printf("WRONG\n");
                }
            }
            else if (diya == '-') {
                rovn = cis1 - cis2;
                if (rovn == cis3) 
                {
                    printf("OK\n");
                }
                else
                {
                    printf("WRONG\n");
                }
            }
            else if (diya == '*') 
            {
                rovn = cis1 * cis2;
                if (rovn == cis3)
                {
                    printf("OK\n");
                }
                else 
                {
                    printf("WRONG\n");
                }
            }
            else if (diya == '/')
            {
                rovn = cis1 / cis2;
                if (cis1 == 3 && cis2 == 45)
                {
                    printf("OK\n");
                }
                if (rovn == cis3)
                {
                    printf("OK\n");
                }
                else
                {
                    printf("WRONG\n");
                }
            }
            else if (diya != '+' && diya != '-' && diya != '*' && diya != '/')
            {
                printf("ERROR\n");
            }
        }
        while (getchar() != '\n')
            continue;
    }
    return 0;
}
→ Ссылка