2010-07-24 2 views
4

И, пожалуйста, не говорите, что это fscanf(); PC++ эквивалент fscanf()?

Я пытаюсь заменить эту строку:

if (fscanf(fp, "P%c\n", &ch) != 1) 

Если я правильно понимаю, он пытается прочитать в полукокса и хранить его & ch, только если это между «P» и «\ n». Это правильно? И если он преуспевает, он возвращает 1 (количество символов, которое оно читает)?

Я пытаюсь найти версию на C++. Есть ли простой способ сделать отформатированное чтение? Или мне нужно использовать команды fstream, operator >> и inested if?

+2

fscanf - это отличная кровосметельная функция C++. Каково ваше возражение на его использование? –

+0

Возможный дубликат http://stackoverflow.com/questions/2537500/what-is-the-modern-equivalent-c-style-for-the-older-c-like-fscanf-method –

+0

Если fscanf() в порядке для использования в C++, почему мой компилятор говорит мне, что это небезопасно? :-( – Andre

ответ

4

Безопасная альтернатива C++ с проверками типов - std::stringstream.

+0

Да, я немного посмотрел на это, но я не могу найти способ форматирования ввода, например fscanf («P% c \ n "). Я застрял, делая это утомительно? – Andre

+1

Я думаю, что вы можете использовать stringstream для чтения всей строки в виде строки. Затем вы можете получить символ в правильной позиции в строке. –

1

В Visual Studio безопасной, но не переносной эквивалентной функцией является fscanf_s.

В целом, для переносимости вы должны использовать один из классов потоков, который, как вы заметили, может быть больно правильно отформатировать.