scanf
читает столько, сколько он может, но он останавливается, если она попадает на конец ввода или если вход не соответствует спецификации. Он возвращает количество прочитанных элементов, и если оно было остановлено раньше, это число будет меньше числа спецификаторов в вашей строке формата, и любой вход, который не соответствует, все равно будет во входном буфере для будущего чтения.
.: например
Если вы int count = scanf("%f", &val)
и вход «1,23», то val
будет 1.23
, count
будет 1
, а вход будет потребляться.
Если вы int count = scanf("%f", &val)
и вход «Джордж», то val
будет неизменным, count
будет 0
, и «Джордж» по-прежнему будет ждать на стандартный ввод для другого чтения использовать.
Вы можете обнаружить сбой, сравнив count
с количеством вещей, которые вы пытались прочитать, и если он слишком низок, то каким-то образом восстановите или отбросьте ввод и ошибку.
Правильно ... можете ли вы показать код, пожалуйста, и спасибо – smac89
Прочитайте данные в виде строки, а затем проверьте ввод, чтобы убедиться, что он численный, прежде чем пытаться разобрать его как поплавок. C++ не выполняет проверку входных данных. – AndyG
Функция 'scanf' работает ТОЧНО так же, как и в C++, как и в C. Это также во многом означает' cin >> floatvar' wil. Это означает, что он будет читать «все, что он может есть», но если он встречает нечто «не то, что он ожидал», он перестанет читать и оставляет все, что не подходит в буфере. –