| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C++] Интерпретация данных для записи в файл |
| Автор: Night_xxx 30.3.2007, 18:33 | ||
| Так у даны два типа данных char и int. Для записи в файд нужно интерпритировать все данные в тип char* . Значит надо интерпритировать тип int в char*. Я сделал, но у меня что-то неверно с интерпритайией, т.е. вводим: Номер------- 0 Name-------- petr Age----------- 18 И в файл записывается: petr 0 //Т.е. тип int я неправильно интерпритировал Подскажите как надо плиз
|
| Автор: zkv 30.3.2007, 18:55 | ||||
почему оператор << не используете?
ну если все таки по вашему:
также можно использовать itoa() или sprintf() а reinterpret_cast<char*>(&age) просто говорит о том, чтобы рассматривать данные, лежащие по адресу переменной age как массив символов, что не является конвертацией |
| Автор: Night_xxx 30.3.2007, 19:19 |
| Так напигите мне полностью рабочую программу, а то я че то не догоняю. Я написал как было написано в книге, если что-то неправильно так исправьте мне чтобы все работало |
| Автор: Night_xxx 30.3.2007, 19:51 |
| Так что никто не может написать мне чтоб все правильно записывало???????????!!!!!!! |
| Автор: Xenon 30.3.2007, 20:16 | ||
По идее так:
|
| Автор: Night_xxx 30.3.2007, 20:45 |
| Xenon, все осталось так как есть, например вводим: Введите номер записи -------- 0 Введите имя --------------------- name Введите age --------------------- 18 И в итоге в файле видим следующее: name 0 ////////////////////и так далее всегда на месте где должно было быть значение age выходит 0 Так все тип int почему неправильно интерпретируется.... Вопрос все ещё открыт. Что же я делаю не так??? |
| Автор: Xenon 30.3.2007, 20:51 |
| Night_xxx, Ты как считываешь? Код в студию. Если ты открываешь файл в текстовом в редакторе, то ... да ... |
| Автор: Night_xxx 30.3.2007, 21:17 |
| А какая разница где открывать , главное что все таки в них записывается? Так что Xenon, у тебя так как надо выходит в редакторе (куда записывали age записано нужное значение)? Так если записывали значение с типом char все ведь правильно записывается. Поясни подробнее в чем дело в моей программе(почему всегда на месте куда записывали age находятся нули) . Че то я нихрена не понял |
| Автор: zkv 30.3.2007, 21:21 |
нет, как раз интерпретируется он правильно, как массив байтов, может вы хотите преобразовать из int в char? Но в этом случае ваш алгоритм не будет работать, или его придется немного модифицировать. |
| Автор: Night_xxx 30.3.2007, 21:24 |
| Да я хочу тип int преобразовать в char. И как правильно модифицировать. Напишите полностью рабочую программу, чтобы работала как надо. |
| Автор: Xenon 30.3.2007, 21:26 | ||
Поскольку char рассматривается как char при записи, то в файле его ты видишь нормально, а int когда рассматриваешь как char и пишешь в файл, то сам понимаешь, что фиг знает как нарезаный int может выглядеть там как угодно. Тебе нужно все вернуть назад, то есть не в редакторе читать, а в программе читать. Ты же бинарно пишешь.
|
| Автор: Dov 30.3.2007, 21:37 |
Night_xxx, если ты хочешь, что бы тебе помогли, то посиди минут 10, подумай спокойно, сформулируй задачу, ибо я, например, уже часа 2 наблюдаю за твоей перепиской и до сих пор ни фуя не понял: 1. зачем ты пишешь в бинарный файл, а не в текстовый? 2. зачем int в char переводить? 3. зачем printf, gets, cout, cin и т.д. всё вместе перемешано? Ну, и так далее... |
| Автор: Night_xxx 30.3.2007, 22:27 | ||
| Так в начале отвечу Dov, 1)пишу в бинарный файл, т.к. потом мне будет легче искать там нужные значения (а тут я только выложил непонятную мне часть програмки); 2)перевожу int в char так как у меня есть ещё тип int в условии (для поля age) , и я прочитал в книге чтобы привести тип int к типу char необходимо использовать оператор reinterpret<char*> А вообще это приведение необходимо так как при работе с двоичными файлами нужен только тип char* 3)А что в этом такого!!!!!!!!!!!!!!!!! Ну теперь ладно видимо так кашу не сваришь, вообщем я продвинулся дальше и теперь изложу следующее событие, вызывающее у меня непонимание: Вначале программа:
Теперь что мне непонятно: Вводим: Имя файла ---------- fail Вначале в меню выбираем записать значения (1) Номер записи--------- 0 Name-------------------- name Age---------------------- 13 Продолжаем Номер записи--------- 1 Name-------------------- nameeeee Age---------------------- 15 Продолжаем Номер записи--------- 2 Name-------------------- nameeeeeeeeee Age---------------------- 18 Выходим в меню Выбираем чтение Прочитать запись ----0 Все правильно вывелось Прочитать запись-----1 Все правильно вывелось Прочитать запись-----2 И как ни странно я не нахожу тут своей последней записи, вместо этого выходит запись 1. Вообщем последняя запись не записывается, а почему?????????? Ответьте мне на этот вопрос ответом, а ни приветом |
| Автор: Xenon 30.3.2007, 22:50 |
| У тебя вообще сплошная жесть, а не код. Мешать стиль - плохой тон. Ты либо в С++ пиши, либо уж в С, а то такую мешанину читать не очень удобно. Потом, ты определяешь новую переменную fstream fbin(filename, ios::binary| ios::in| ios::out); и открываешь файл, затем в zapici() ты опять открываешь тот же файл. Зачем создавать переменную на чтение/запись, если ты либо читаешь, либо пишешь ... Тут может быть что угодно, вплоть до того, что у тебя файл старый с данными уже записаными перезаписынами вкривь и вкось. PS. Что за цикл switch без break`ов? |
| Автор: Night_xxx 30.3.2007, 23:00 |
| Да теперь я понял что ты Xenon, объяснил мне насчет приведения типа int в char. С этим все ясно. Но как и с первым случаем когда я age использую как тип int так и по-другому, когда я исрользую age в типе char При записи последняя запись не записывается !!!!!!!! Ну напишите мне мой последний выложенный вариант правильно, чтобы все записывалось. Ну а насчет смешения стилей я ни думал что как-то может повлиять на правильность программы. Ну все таки исправьте мой последний код правильно или укажите точно на мою ошибку. |
| Автор: Xenon 30.3.2007, 23:14 | ||
| Night_xxx, переписал ... У тебя жутко спроектировано, если честно ... Задумайся PS. А чего тебе мешает пользоваться string?
|
| Автор: Night_xxx 31.3.2007, 00:58 |
| Все спасибо тебе Xenon, А вообще у меня был готовый вариант в книжке, но я сам по своему хотел написать. Все таки когда все сам делаешь, то очень многому учишься. |
| Автор: Xenon 31.3.2007, 01:24 | ||
| Не за что - учись Единственное, мне еще вызов функции menu() не нравится. Я думаю, лучше так:
|