![]() |
|
Модераторы: bsa |
![]()
|
|
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
В текстовый файл нужно вводить ФИО (fio) и зарплату (zarplata)
записываю построчно, т.е. 1-ая строка fio, 2-ая - zarplata, 3-я опять fio, 4-я сново zarplata........и так сколько нужно. ofstream outfile("test.txt"); for (int g=0;g<9;g++) outfile << "Familia Imia Otchestvo\n3456\n"; outfile.close(); Потом напишу нормальный ввод пользователем с клавиатуры. Не получается считывать в массив из файла. Помогите. Знаю, чтобы считывать строки с пробелами до конца файла нужно использовать ifstream infile("test.txt"); while(!infile.eof()){ ............. infile.getline(.........................); ............. } удобнее наверно организовать структуру или класс. Покажите как нужно правильно считывать файл в массив, может несколько массивов чтобы я затем мог работать с числами отдельно. Заранее спасибо. P.S. с записью в текстовый файл думаю у меня проблем не должно быть, а вот считывание в массивы(или структуру или класс ------- мне хотя бы сделать двумя массивами) mas_fio и mas_zarplata - это проблема Это сообщение отредактировал(а) Slyfox - 10.12.2007, 09:50 |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Дайте хотя бы ссылку - т.е. почитать про вывод файлов в массивы
|
|||
|
||||
| _stranger_ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 3.10.2006 Где: город-герой Киев Репутация: нет Всего: 2 |
как пример:
|
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Slyfox, делаешь структуру:
|
||||
|
|||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
не знаю почему, но не записывает в файл :( Помогите. Все дело в структуре как мне кажется - не пишется в файл. Вся надежда на ваш опыт. Visual C++6. |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
файл создаётся пустым? вообще не создаётся? |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
не компилируется программа попробовал сделать вместо структуры - int nadezda[70]; - тоже не компилируется программа Добавлено через 1 минуту и 44 секунды Вот выдает c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(41) : error C2374: 'i' : redefinition; multiple initialization c:\Program Files\Microsoft Visual Studio\MyProjects\sotrudnik\sotrudnik.cpp(32) : see declaration of 'i' |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Slyfox, выкинь VC6 - он не соответствует стандарту. В твоем случае, он не позволяет сделать:
|
|||
|
||||
| Slyfox |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
нельзя - реализация именно в этой среде попоытаюсь переменную вынести вынес --- пока все OK продолжаю играть с файлами дальше Предположение: наверное из-за не установленного к VS6 сервис пака 6 Счас обновлю и проверю на всякий по старому способу Это сообщение отредактировал(а) Slyfox - 11.12.2007, 00:24 |
||||
|
|||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: нет Всего: 92 |
я уже приучился немного кросс-студийный код писать:
работает в 6-м, 7-м и 8-м VC++, MS умудрились во все эти три версии разное поведение заложить насчет видимости переменных. Это сообщение отредактировал(а) zkv - 11.12.2007, 00:21 |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Что-то не так с char fio[21]; //Фамилия char dolznost[21]; // Должность т.е. при сохранении. Что я сделал не так и как надо? Не то сохраняет в файл особенно если есть пробелы. Помогите. |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: нет Всего: 92 |
||||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Ввожу везде 1 (единицы) В файле должно получится четыре штуки единиц В файле получается две штуки единиц в 2-х строках (вместо 4-х) Добавлено через 8 минут и 36 секунд Думаю, что gets можно убрать, а продолжать использовать cin --- т.е. есть установить какой-нидь флаг в нем, который можно установить и разрешить вводить с пробелами в переменные типа char[21], а потом установить опять флаг как было для чисел. Может это мне поможет? Знал бы еще какой флаг и как установить. Возможно вы знаете решение? Может есть другая функция? Это сообщение отредактировал(а) Slyfox - 11.12.2007, 01:41 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Slyfox, ты уверен, что у тебя записывается без пробелов, а не читается без пробелов?
operator>> - выполняет ввод слова, а не строки. Используй istream::getline() |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Как ею пользоваться? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Я наверное не так объяснил.
cin.getline (z[i].fio,MAX); ------------- ничего в файл не пишет(программа скомпилировалась). Я правильно ее использую? Подскажите что не так. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
getline читает строку из файла!
cin.getline() - читает строку с клавиатуры (стандартного ввода) |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
А как мне считать в массив z[i].fio строку введенную с клавиатуры вместе с пробелами?
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
cin.getline(z[i].fio, 21); |
|||
|
||||
| Slyfox |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Вот в этом месте у меня в файл не пишет - не пишет z[i].fio что-то не то но программа скомпилировалась Это сообщение отредактировал(а) Slyfox - 11.12.2007, 18:54 |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Ты меня что спросил? Как считать строку! А не как записать! Разницу чувствуешь? Я тебе ответил на вопрос, как прочитать строку с пробелами.
Записать можно с помощью operator<<: cout << z[i].fio |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Мне тяжело объяснить, но думаю, что я остался не понятым. ----1)-- cin.getline(z[i].fio,21); ----2)-- cout << z[i].fio; 1) Тут пытаюсь записать в массив строку с пробелами 2) И сразу вывести то, что в нем находится, чтобы быть точно уверенным что все правильно записывает Как только я ввожу "Введите количество работников, которые будут введены в таблицу" - число 1 "Введите данные о работнике №" - ввожу первый символ, только я ввожу этот символ как программа не понятно почему закрывается. При этом создается файл пустой который занимает 2байта. Как только я ввожу "Введите количество работников, которые будут введены в таблицу" - число 2 "Введите данные о работнике №" - ввожу первый символ - второй при этом не приходится вводить он сам становится идентичным 1-ому. При этом создается файл состоящий из двух строк: первая строка пустая, во второй записан первый введенный символ. Также ограничения одним символом. Где у меня ошибка? Помогите. Пожалуйста. Чем дальше тем непредсказуемее... |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
Для начала посмотри мой код. Я малость тебя подправил. В данном случае программа записывает значения в файл. Но учти - вводимый тобой русский текст отображаться не будет. Надо обрабатывать строки в функции OemToChar.
Ошибок у тебя много. Особенно со структурой. Будут вопросы спрашивай.
ЗЫ. Для модераторов - так хоть Борландом пользоваться можно? |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Код пока предложенный не проверял.
Но первое что бросилось в глаза char *fio; ........ char dolznost[250]; почему они такие разные, это к чему, т.е. зачем? |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
Считай это моей прихотью. Это я чисто для себя сделал. По большому счету конечно можешь оставить так как у тебя - вполне хватит 21 элемента. Указатель на char значит - что массив у тебя безразмерный (естественно ограничивается типом).В кратце - если вдруг фамилия больше 21 знаков он и создат строку более 21 знака.
В твоем случае ты не правильно записываешь данные в структуру. Это надо делать через функцию strcpy(куда_копируешь, что_копируешь) либо использовать как я указатель. |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
если бы это была строка класса std::string то так бы и было. А для сишных строк надо выделять память самому, cin это за тебя не сделает. Так что вместо char *fio нужно писать char fio[250] (или другой размер, не важно). |
|||
|
||||
| mrbrooks |
|
||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
тогда что бы убедится в вашей правоте скажите почему char *fio работает? и причем без проблем? Бьерн Страуструп пишет
Парируйте если можете тов. likehood Это сообщение отредактировал(а) mrbrooks - 11.12.2007, 23:21 |
||||
|
|||||
| likehood |
|
||||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
у Страуструпа речь идет о инициализации строки, когда компилятор может вычислить нужный размер работает до поры до времени. Попробуй выполнить такой код в дебаг-версии:
У меня в студии выдается ошибка, что я исползьую переменную str без инициализации. Добавлено через 3 минуты и 46 секунд а вот такой код не работает и в релизе:
|
||||
|
|||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
Я под Билдером зделал так:
все нормально |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: нет Всего: 24 |
попробуй лучше второй мой пример выполнить (с двумя строками)
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
чудеса какие-то. В Борланде все пашет. Завтра на VS на работе посмотрю.
|
|||
|
||||
| Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: нет Всего: 29 |
mrbrooks, likehood прав. Тебе просто повезло.
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
||||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Мда, очень повезло...
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
да уж я счасливчик
Это сообщение отредактировал(а) mrbrooks - 12.12.2007, 00:00 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
mrbrooks, да зачем нам твои примеры? Изначально понятно, что этот код ОШИБОЧНЫЙ. И если у тебя в билдере почему-то работает, это не значит что он вообще работает. Попробуй при определении присвоить str=0 и str1=0. И посмотри, что будет.
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
я уже спать хочу
зделал. билдер послал меня в задницу - если ни куда подальше Добавлено через 8 минут и 50 секунд а вот если str1 = "0" и str2 = "0" - то все зашибись Это сообщение отредактировал(а) mrbrooks - 12.12.2007, 00:05 |
|||
|
||||
| Slyfox |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 15.11.2007 Репутация: нет Всего: нет |
Сам разобрался. Может вы и пытались мне помочь, но я не услышал того, что мне надо было.
Ошибка была в воде с клавиатуры. Вот правильный вариант:
Написать то я написал только не совсем понял - мне пока не понятно еще как это у меня работает. Сам не понял как написал. Если убрать cin.get(); то результаты плачебные в файле. Объясните мне что дает cin.get(); , т.е. как она работает и для чего предназначена (пустая ф-ция). Мне не понятно почему вместе cin.get(); cin.get(z[i].fio,21); только получается нужный вариант. Объясните. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Slyfox, а документацию почитать?
попробуй так:
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |