#c
#c
Вопрос:
do {
printf("Enter endpoints of interval to be integrated (low hi): ");
test = scanf("%lf %lf", amp;low, amp;hi);
if (test != 2) {
badInput(low);
badInput(hi);
printf("Error: Improperly formatted input");
}
else if(low > hi)
printf("Error: low must be < hin");
} while ((test != 2 || low > hi));
В этом коде я пытаюсь устранить ошибку пользовательского ввода. В настоящее время моя проблема заключается в том, что если пользователь вводит буквы вместо цифр, приглашение просто повторяется, не позволяя новому пользователю вводить данные.
Что мне нужно было бы поместить в функцию badInput
, чтобы избежать этого?
Ответ №1:
В настоящее время моя проблема заключается в том, что если пользователь вводит буквы вместо цифр, приглашение просто повторяется, не позволяя новому пользователю вводить данные.
scanf()
Ожидает два двойных ввода от пользователя:
test = scanf("%lf %lf", amp;low, amp;hi);
Когда вы вводите буквы вместо числа в качестве входных данных в scanf()
, он не использует их, потому что они не соответствуют заданной строке формата, и оставляет их во входном буфере. Вы должны иметь в виду, что когда вы вводите буквы вместо цифр, scanf()
должно быть возвращаемое 0
значение, потому что оно их не использует. Поскольку, scanf()
не использует недопустимый ввод, на следующей итерации цикла scanf()
найдите неиспользованный недопустимый ввод в буфере и снова пропустите их. Вот почему ваша программа не останавливается для ввода при вводе букв в качестве входных данных. Чтобы решить эту проблему, вы должны удалить неверный ввод из буфера. Вы можете сделать:
do {
printf("Enter endpoints of interval to be integrated (low hi): ");
test = scanf("%lf %lf", amp;low, amp;hi);
if (test != 2) {
badInput(low);
badInput(hi);
printf("Error: Improperly formatted input");
int c;
while((c = getchar()) != 'n' amp;amp; c != EOF) // <=== This loop read the extra input characters and discard them
/* discard the character */;
}
......
......