Проблема: продолжайте предлагать пользователю ввести код, пока справа он не введет правильные значения - PullRequest
0 голосов
/ 07 мая 2020

У меня ошибка со следующим кодом. Это относительно просто, но я не могу понять, где я ошибаюсь. Вот часть кода:

    int target=0,nextRow;
    char nextCol;

    while(target == 0)
    {
            printf("Enter a valid target: ");
            scanf("%c%d",&nextCol,&nextRow);
            if(nextCol>= 'a' && nextCol <= 'z') /* convert to uppercase */
                    nextCol=nextCol-32;
            if(nextRow>row || nextRow<1 || nextCol<'A' || (nextCol-64)>col)
                    target=0;
            else
                    target=1;
    }

По сути, пользователю предлагается ввести char и int, например B4, C8 и т.д. c. Col и Row - это предопределенные целые числа. Если значения, введенные пользователем, выходят за границы, цель остается равной 0. Иначе цель = 1, поэтому l oop выйдет. Когда я запускаю это и продолжаю вводить недопустимые значения, "Введите допустимую цель" начинает повторяться. Почему?

Изображение ошибки

1 Ответ

1 голос
/ 07 мая 2020

По-видимому, условие (nextCol-64)>col кажется неуместным.

Если вы введете fe 'b' как вход для nextCol, выражение будет оценено как 2 > col, что кажется неправильным.

Также я считаю, что col и, возможно, даже row имеют значение 0, и в этом случае соответствующие условия всегда будут оцениваться как true, а l oop никогда не завершится как кажется, работает.

Задумайтесь над logi c своей программы!

...