Вопрос по windows, c, visual-studio – Какой тип сканирует модификатор sscanf% Fd?

1

Я сталкивался с устаревшим кодом, который имеет следующий тип строки:

sscanf (szBuff, "% Fd% Ff% Fd% Ff";

Кто-нибудь видел модификатор как Fd или Ff? Если так, что это значит?

Я не могу найти какую-либо информацию об этом. Код компилируется и работает нормально.

Почему вы вырезали пример в месте, где он становится интересным, то есть другие аргументы sscanf и их объявления? Jens
Какой компилятор и / или среда разработки? Throwback1986

Ваш Ответ

3   ответа
1

они такие же, как и их нижние буквы. Почему это? Для симметрии со спецификаторами преобразования printf. Вот%x а также%X пишите строчные или прописные числа какdeadbeef а такжеDEADBEEF. Симметрия позволяет использовать одинаковую строку формата для обоих входов сscanf и вывод сprintf.

#define FMT "%F\n"

sscanf (str, FMT, &value);
printf (FMT, value);
Вот одна строка примера кода: sscanf (szTemp, "% Ff% Ff% Ff% Ff% d% d% Fd% Fd% Ff% d% d% Fs% d", & sp_fpt0.x, & sp_fpt0.y, & sp_fpt1.x, & sp_fpt1.y, & iMember1, & iMember2, & sp_iMember1End, & sp_iMember2End, & sp_fDist, & iSpliceMember, & iPlumbMember, sp_szOrigLabel, & sp_iPlumbnt Jack
А это все указатели наfloat (для% F ...) иint (для% d), верно? Jens
Это правильно. % Fs для строки символов (char sp_szOrigLabel [20]) Jack
Whoa! Нет, тогда это не правильно. Achar[] являетсян a float. Похоже, ваша система (Windows?) Не использует семантику POSIX для% F и обрабатываетF как модификатор для% s! Кто ваш поставщик системы и поставщик компиляторов / библиотек? Jens
Понял мое разочарование? Char [] не является float и не являются целыми числами, которые подвергаются% Fd! Я использую Microsoft Visual Studio 10. Этот код существует уже долгое время. Jack
6

fscanf функции:

(C991, 7.19.6.2p14) Спецификаторы преобразования A, E, F, G и X также действительны и ведут себя так же, как, соответственно, a, e, f, g и x.

Так в%Fd, спецификация преобразования -%F что эквивалентно%f. Обратите внимание, чтоd не является частью спецификации преобразования.

Например (дляfprintf функции%F также совпадает с%f):

printf("%fd\n", 3.141592);

будет печатать:

3.141592d

1. C89 / C90 не распознаетF спецификатор конверсии. Например, дляfscanf соответствующий пункт C90 в 7.9.6.2 гласит: Спецификаторы преобразования E, G и X также действительны и ведут себя так же, как, соответственно, e, g и x

Похоже, Джек использует нестандартную систему, где "% Fs" на самом деле нужен указатель на символ, чтобы идти с ним, а "F" - модификатор. Jens
1

%F является расширением POSIX (и C99).

http: //pubs.opengroup.org/onlinepubs/007904975/functions/scanf.htm

"Спецификаторы преобразования A, E, F, G и X также действительны и должны быть эквивалентны a, e, f, g и x соответственно."

Похожие вопросы