Если входное значение, считанное fscanf()
, не соответствует ожидаемому типу (как определено спецификатором преобразования), об этом будет сообщено возвращаемым значением fscanf()
(которое равно числу спецификаторов покрытия успешно прочитано).
int x;
if ( fscanf( file, "%d", &x ) != 1 )
{
// input was not a number
}
В целом, все семейство функций scanf()
в основном предназначено для чтения тривиальных данных, разделенных пробелами. Обычно проще и надежнее читать всю строку (используя fgets()
), а затем выполнять внутренний анализ. (strtol()
и strtod()
могут быть здесь полезны, но strtok()
следует использовать с осторожностью, особенно в многопоточной среде.)