Є рядок виду:
482 у820рв Марія Львівна Закащікова * 9644 4855
Необхідно її розпарсити на складові:
- номер таксопарку (int),
- номер автомобіля (покажчик на wchar_t. пам'ять виділена з лишком),
- ПІБ до зірочки (покажчик на wchar_t. Пам'ять виділена з лишком),
- витрата (float),
- прибуток (float).
Так як початкова рядок теж двубайтовая - використовую функцію swscanf. Виходить функція-парсер виду:
Але, як можна зрозуміти, вона не працює. Чи не зчитується навіть перший INT. Питання стандартний - де я ідіот?
UPD По-перше всім величезне спасибі за допомогу і слушні поради. Виправляю свої помилки і недомовки, які могли вплинути (і швидше за все вплинули) на бачення проблеми і коду. Суть програми - вважати з файлу структуровані дані в масив структур. Я вирішив робити це шляхом зчитування терміни і парсинга її на складові, отже я читаю дані не безпосередньо в змінні, а в поля об'єктів масиву.
Далі в функцію парсинга я передаю ТЕПЕР ВЖЕ (спасибі VladD) покажчики на поля (Int і Float), а замість полів типу UnicodeString я передаю результат функції c_str (), яка повертає покажчик на рядок типу wchar_t. Відповідно в кінцевому коді це виглядає ось так от:
UPD2 Виправивши все описані надалі помилки, я отримав необхідний ефект, ResultParser дійсно став в результаті дорівнює 5, що означає, що всі дані вважалися. Але зіткнувся з іншою проблемою - в полях написано все не російськими літерами, як треба, а, мабуть, в іншій кодуванні. Відповідно виникає питання: як необхідно зчитувати дані з файлового потоку wfstream в об'єкт типу UnicodeString, минаючи цей милицю і інші пов'язані, мабуть з ним, помилки?
заданий 24 Жовтня '13 о 18:27
@VladD, так ні ж. Насправді мова про те, що у МС scanf ( ".% S [^ *]." А потрібно (як у відповіді @strol) scanf ( ".% [^ *]." Тобто% [. А НЕ% s [. IMHO це основне. - А плутанина c scanf ( ".", fsp. або scanf ( ".", fsp [0]. // тут буде warning, але gcc згенерувати правильний код або scanf ( ".", Fsp. Удавана. Компілятор (в даному контексті) все це сприймає. - avp 25 Жовтня '13 о 11:53
@strol, насправді якщо російські літери набивати в UTF-8, то можна вказати локаль en_US.UTF-8 і вони будуть зображуватися. Але, навіть якщо відкинути російські букви і wchar, то основна помилка у ТЗ у звичайному форматі scanf. - Ви коли відповіді пишете, то не тільки код приводите, а й словами вказуйте людині, що потрібно робити. - avp 25 Жовтня '13 о 12:36