возвращаемое значение fscanf [закрыто]
что возвращает fscanf при чтении данных в файле. Например,
int number1, number2, number3, number4, c;
c = fscanf (spFile, "%d", &number1);
//c will be 1 in this case.
c = fscanf (spFile, "%d %d %d %d", &number1, &number1, &number3, &number4);
//in this case, c will return 4.
Я просто хочу знать, почему он возвращает такие значения в зависимости от числа аргументов.
5 ответов
С manpage для семейства Xscanf функции:
после успешного завершения эти функции возвращают число успешно сопоставлены и назначены входные элементы; это число может быть равно нулю в случае ранней ошибки сопоставления. Если вход заканчивается раньше первый соответствуя отказ или преобразование, EOF будут возвращены. Если возникает ошибка чтения, устанавливается индикатор ошибки для потока, EOF должен быть возвращен, и errno будет установлен в укажите ошибку
Итак, ваш первый вызов fscanf
возвращает 1, потому что один элемент ввода (&number1
) был успешно сопоставлен со спецификатором формата %d
. Ваш второй звонок в fscanf
возвращает 4, потому что все 4 аргумента были сопоставлены.
цитирую cplusplus.com .
при успешном выполнении функция возвращает количество элементов аргумента список успешно заполнен. Это число может соответствовать ожидаемому числу элементы или быть меньше (даже ноль) из-за сбоя сопоставления, чтения ошибки или достижения конца файла.
Если происходит ошибка чтения или конец файла достигается в то время чтение, правильной индикатор установлен (feof или ferror). И, если происходит до того, как какие-либо данные могут быть успешно прочитаны, возвращается EOF.
-- EDIT--
Если вы намерены определить количество байтов, прочитанных в строке.
int bytes;
char str[80];
fscanf (stdin, "%s%n",str,&bytes);
printf("Number of bytes read = %d",bytes);
с руководство страницы:
*эти функции возвращают количество успешно сопоставленных и назначенных входных элементов, которое может быть меньше, чем предусмотрено, или даже равно нулю в случае раннего сбоя сопоставления. *
следовательно, 1-й возвращает 1, если можно прочитать одно целое число из файла, 2-й возвращает 4, если можно прочитать 4 целых числа из файла.
это очень прямой вопрос, и Чарльз и Эд правильно ответили на него до меня. Но они не упомянули, где вы должны искать такие вещи в следующий раз, когда вы застряли.
первый вопрос -- fscanf принадлежит к семейству формируемых функций ввода (сканирования), которые должны считывать ввод и сообщать некоторую информацию о данных, считываемых как байты или количество элементов(адресов переменных), которые получили соответствующий ввод и имели успешным заданием.
здесь fscanf должен проверить совпадения во входном файле со строкой формата, указанной в вызове функции, и, соответственно, назначить переменную - адрес (в порядке их расположения) со значением, и после завершения она вернет общее количество успешных назначений, которые она сделала. отсюда и результат 1 и 4 (если была оказана должным образом).
вторая часть: где искать ? -- что ж описанные детали для такой функции легко найти на страницах руководства или posix doc, если вы обратитесь к одному.
Если вы заметили, предыдущие два ответа также содержат небольшие выдержки из man-страниц .
надеюсь, что это помогает.
возвращаемое значение не зависит от количества аргументов fscanf
,Это зависит от количества значений успешно сканируются fscanf
.