![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Люди у меня через неделю городская олимпиада. Раньше я писал на Паскале, но перешёл на C++. Там требуют читать из файла данные и записывать ответ. Я на си могу только записывать и только через fstream. Читать не получается. Например надо прочитать:
2 3 5 АБВ Числа 2, 3, 5 записать в 3 int`а, а строку в char*. Я что-то выдел, что можно через FILE, но не знаю как работает. В паскале там всё просто с этим, мне надо так, чтобы не писать огромных функций по чтению. Help, plz. |
|||
|
||||
Exekutor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 1.11.2005 Где: Казахстан. Костан ай Репутация: 1 Всего: 4 |
функции scanf и др. тебе в помощь
-------------------- [color=blue][size=2]En taro addun, ma sol larinas[/size][/color] |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Ну fstream, так fstream:
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
TheBoss |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 12.6.2005 Где: Санкт-Петербург Репутация: нет Всего: нет |
|
|||
|
||||
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
TheBoss
Что-то не совсем понял код. Объявить - объявил файл, но ни адреса, ни открытия. Void Ну ввёл я в прогу:
Создал файл на диске D: под именем 1.txt, ввёл туда: 2 3 5 ABC Запустил прогу и смотрю результат: 0 0 0 Т. е. 3 нуля и пустая строка, т. е. ничего не прочиталось. Именно из-за этого и у меня не получалось. А строки не согу, т. к. у меня Turbo C++ 3.0 и там видимо устаревший стандарт С\С++: там нету bool и true/false(вместо них int и 1/0). Также я не нашёл string`а. Это сообщение отредактировал(а) OXOTHUK - 30.12.2005, 16:21 |
|||
|
||||
dronzo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 26.11.2005 Где: Москва Репутация: 1 Всего: 8 |
OXOTHUK
Dev-C++ по крайней мере съел. Это сообщение отредактировал(а) dronzo - 30.12.2005, 17:00 |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
OXOTHUK
У тебя просто файл не открылся. Бэкслэш надо писать двойной.
Рискуем нарваться на buffer overrun. Лучше пользоваться istream::getline, раз уж у нас нет std::string. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
blackofe |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
поправьте меня, если я не прав. но, имхо, bool есть в с++ с самой первой редакции (у меня нет страуструпа первой редакции, но во второй bool точно есть). а вот string, да, появился только в третьей редакции. поскольку во второй редакции страуструп ввел шаблоны, а степанов этим воспользовался, создав STL. |
|||
|
||||
LPBOY |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Не читал первую редакцию, но вот что дал поиск: http://www.intuit.ru/department/se/pbmsu/8/3.html
В BC++3.0 можно сделать так:
Все же, чем int и 0/1, несколько лучше имхо. --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||||
|
|||||||
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Void
Это как? P.S. ничего не знаю, но bool мне надо вручную вводить и его готового там нет. |
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Очень просто: D:\\1.txt --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
OXOTHUK
Бэкслэш надо писать двойной потому что компилятор думает что следующий за ним символ вместе с ним образуют специальный символ(к примеру '\n')Представь такое имя файла
Такое имя привело бы к неверной работе. Но в С++ '\\'=='\' в обычной жизни (это тоже специальная комбинация. ![]() Это сообщение отредактировал(а) nikitao - 1.1.2006, 23:24 -------------------- Жизнь - печальная штука. |
|||
|
||||
OXOTHUK |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 116 Регистрация: 21.9.2005 Репутация: нет Всего: 6 |
Извиняюсь, совсем забыл. Не привык я так писать (долбанный паскаль).
Заработало(прочитал), но строку всё равно не хочет - пустая выводится. |
|||
|
||||
dronzo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 26.11.2005 Где: Москва Репутация: 1 Всего: 8 |
OXOTHUK, Правильно я же тебе сказал - замени fin.getline() на fin >> (про overrun читал
![]() |
|||
|
||||
nikitao |
|
||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
dronzo,твое предложение не есть good еще по одной причине(помимо той что сказаал Void):
Возьмем такой файл: 239 30 566 Hello world Очевидно,что нам нужно,чтобы в строке оказалось Hello world,а разумеется окажется Hello .Это проблему ессно решает getline. OXOTHUK Если не понял обьяню более наглядно.На самом деле файл который я написал выше представляет вид ,что-то типа этого: 239\n 30\n 566\n Hello world Оператор >> по умолчанию пропускает все знаки разделители ,затем записывает в указаную переменную данный до следующего знака разделителя или до "знака другого типа"(к примеру если строка 12345Vingrad ,то после fin>>a,окажется в a 12345). Получается что после строки в коде
Файловый указатель указывает на последний '\n' В свою очередь getline работает по другому:Она ничего не пропускает,но символы типа '\n' являются для нее указанием ,что это конец строки.Таковым оказывается 1 считаный ей символ=>str остается пустым.В результате всего надо просто ввести "темповый" символ.
Это сообщение отредактировал(а) nikitao - 2.1.2006, 16:52 -------------------- Жизнь - печальная штука. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |