Программа, которая проверяет на правильность пример на 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;
}