![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Gem |
|
|||
|
Unregistered |
Пытаюсь разобраться в TC с файлами последовательного доступа по учебе. Несколько проблематично
Допустим в файл занесено несколько строк: Размер - 44 Цена - 2000 , где числа 44 и 2000 были внесены с клавы. Файл был закрыт, а затем открыт для чтения. Каким образом мне считать в переменную число 2000? |
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Читай первую строку. (fgets)
Потом читай вторую. (Тем же fgets) Из строки выбирай число и пихай в переменную. |
|||
|
||||
| Gem |
|
|||
|
Unregistered |
Насколько я понимаю разницы между fgets и fscanf нет - результат один. Так вот, используя fscanf, переменная (дОлжная быть равной второй строке) содержит слово "Размер". Если же оставить одни цифры, т.е. первая строка - "44", вторая - "2000", то все идет без проблем. Но такой урезанный файл меня не устраивает.
|
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Нет отличия есть.
fscanf читает до первого символа разделителя. В этом случае это пробел. fgets читает всю строку целиком включая символ возврата каретки и перехода на следующую строку '\n', поэтому его надо удалять врчную если это необходимо. Я если честно fscanf вообще никогда не юзал или fgets или fread. |
|||
|
||||
| Gem |
|
|||
|
Unregistered |
Да, с fgets считывает, что нужно. Спасибо. Вот только предупреждение выдает
"Suspicious pointer conversion " на строку fgets(cost,15,suit) , где cost - указатель на символьный массив; suit - файловый указатель На это глаза закрыть можно?
какую функцию лучше использовать? |
|||
|
||||
| Конструктор |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 641 Регистрация: 12.5.2004 Где: Москва Репутация: нет Всего: 10 |
Здесь верятно придется делать ручками. Просматриваешь все символы строки, когда найдешь хоть одну цифру, значит пошло значение переменной. Считываешь во временный массив все цифры которые встретятся после найденной. Не забываешь так-же дописать в конец временного массива нуль-терминатор. Затем переводишь полученный временный массив, в котором должна получиться строка с числовым значением переменной в число (ф-ции atoi или atol из stdlib).
|
|||
|
||||
| Gem |
|
|||
|
Unregistered |
Посимвольно массив не просматриваю, просто с определенного места определнное количество символов копирую в новый массив. Работает. Спасибо за помощь.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |