JiaWei Lee Ответов: 1

Как проверить, что ввод не является алфавитом/символом и циклом, если вы хотите продолжить


Требование:
1. попросите пользователя ввести значение x, y, z для математического уравнения
2. проверьте, что значение не является алфавитом - спросите, хотите ли вы повторно ввести его
3. вычислите ответ, если все входные данные являются числовыми
3. цикл, когда пользователь хочет продолжить для следующего ввода

Проблема:
Запустите его и выясните, может ли вводиться бесконечный без выполнения другого кода. когда ключ в значении для x, y, z

1. можно ввести бесконечное число, когда входное число является целым
Введите действительное число X:
Введите действительное число Y:
Введите действительное число Z:
1
1
1
1

2. при вводе алфавитного кода продолжайте цикл до тех пор, пока printf () не продолжится
Введите действительное число X:
Введите действительное число Y:
Введите действительное число Z:
Введенное значение не является числовым
Продолжить (Y/N)? y
Введите действительное число X:
Введите действительное число Y:
Введите действительное число Z:
Введенное значение не является числовым
Продолжить (Y/N)?


3. после этого попытался ввести целое число, затем алфавит, затем целое число, так или иначе оно может работать до конца

Введите действительное число X:
Введите действительное число Y:
Введите действительное число Z:
Введенное значение не является числовым
Продолжить (Y/N)? 1
1
1
1
1
1
ф
Введенное значение не является числовым
Продолжить (Y/N)? 1
1
1
X=1.0000; Y=1.0000 ; Z=1.0000
ф(х,г): -8.0000; г(х,Z): 0.0000; ч(Х,У,Z): -инф
Вы хотите продолжить Y/N:

Что я уже пробовал:

do
    {
        printf("Enter real number X: \n");
        //scanf("%f",&X);
         
        printf("Enter real number Y: \n");
        //scanf("%f",&Y);
         
        printf("Enter real number Z: \n");
        //scanf("%f",&Z);
         
         while(1)
        {
            if (scanf("%f%f%f", &X,&Y,&Z) != 3)
            {
            printf("Entered value is not numeric\n");
            printf("Continue (Y/N)? ");
            scanf(" %c", &choice);
            }
            if ((choice != 'Y') && (choice != 'y')) break;
        }
         
            if(scanf("%f%f%f", &X, &Y, &Z) == 3)
            {
             
   //continue to calculate the equation and print result
            }

Leo Chapiro

А в чем, собственно, проблема с нынешним решением?

JiaWei Lee

Бесконечный ввод входных данных, если все числовые по праву только 3
Затем при вводе алфавита код зацикливается снова и снова, показывая printf ( попросите продолжить)

Я описал ситуацию в вопросе

1 Ответов

Рейтинг:
2

Patrice T

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

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.