![]() |
|
Модераторы: bsa |
![]()
|
|
| VerLinG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 19.12.2007 Репутация: нет Всего: нет |
Помогите пожалуйста! Никак не пойму в чем проблема!!! Значит дело вот в чем...Я создаю собственный файл базы данных с помощью вот такого кода:
код C++ struct exchange{ int n_rooms; int floor; int S; char adress[20]; }flat[100]; FILE *fp; int i = 0; char filename[25]; printf("Input filename: "); scanf("%s",&filename); printf("\n"); int j; printf("Enter amount of elements: "); scanf("%d",&j); printf("\n"); for(int l=0;l<100;l++){ flat[l].n_rooms=NULL; flat[l].floor=NULL; flat[l].S=NULL; for(int g=0;g<20;g++) flat[l].adress[g]=NULL; } while ((fp = fopen(filename, "w")) == NULL){ printf("Cannot open file %s\n", filename); printf("Input filename: "); scanf("%s",&filename); } for ( int i=0;i<j;i++){ printf("input n_rooms :\n"); scanf("%s",&flat[i].n_rooms); printf("input floor :\n"); scanf("%d",&flat[i].floor); printf("input s :\n"); scanf("%d",&flat[i].S); printf("input adress :\n"); scanf("%s",&flat[i].adress); printf("\n"); } for(i=0;i<100;i++) fwrite(&flat[i], sizeof(exchange), 1, fp); fclose(fp); printf("Thanks"); getch(); Файл создается нормально, только вот почему то неправильно читается из него!!! Для чтения использую вот такой код: код C++ struct exchange{ int n_rooms; int floor; int S; char adress[80]; }flat[100]; FILE *fp; int i = 0; char filename[25]="C:\\1.txt"; while ((fp = fopen(filename, "r")) == NULL){ printf("Cannot open file %s\n", filename); printf("Input filename: "); gets(filename); } while(fread(&flat[i],sizeof(exchange),1,fp)==1){ printf("%d\n",flat[i].n_rooms); printf("%d\n",flat[i].floor); printf("%d\n",flat[i].S); printf("%s\n",flat[i].adress); printf("\n"); i++; } getch(); fclose(fp); Подскажите пожалуйста в чем дело!Почему не заполняется структура правильно? |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
у тебя в первой структуре char adress[20]; а во второй char adress[80]; - размер разный, читается не то что записано.
а вообще... 0. используй подсветку синтаксиса, читать невозможно 1. определения структур обычно помещают в .h файл и включают во всех .c или .cpp где используются. этим гарантируется, что определение структуры и проч. одинаково во всех единицах компиляции. 2. для констант (у тебя это 100 и 20) используется
или
так ошибку вроде твоей сделать сложнее 3. этот цикл
излишен. достаточно adress[0] = '\0'; 4. программа не гарантирует, что будет введено символов не больше, чем может поместиться в строке ну еще там по мелочи, не очень важно, сначало это исправь |
||||||
|
|||||||
| VerLinG |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 19.12.2007 Репутация: нет Всего: нет |
Добавлено через 20 секунд
Добавлено через 48 секунд вот вариант с подсветкой синтаксиса. Добавлено через 2 минуты и 10 секунд ошибки исправил. считывается из файла только 1 элемент структуры, остальное считывается в виде чисел |
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
имхо все нормально у тебя считывается. просто ты в файл записываешь 100 элементов независимо от количества введенных, вот тебе куча нулей и выводится. поменяй в цикле записи 100 на j и почувствуй разницу
|
|||
|
||||
| VerLinG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 19.12.2007 Репутация: нет Всего: нет |
эффект один и тот же. если не трудно напиши пожалуйста в аську
Это сообщение отредактировал(а) VerLinG - 15.12.2008, 03:11 |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
на форум обратился - на форуме и обсуждай. У людей свои дела есть. |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 15 Всего: 101 |
VerLinG, я компилировал твой первоначальный код (исправив определение структуры) и запускал. все работает.
так что если проблема не решена, опубликуй свой код полностью, тогда будет предметный разговор. Это сообщение отредактировал(а) baldina - 20.12.2007, 01:14 |
|||
|
||||
| mcapple |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 9.12.2007 Репутация: нет Всего: нет |
В программе файл открывается файл с аргументом "r"/"w" для чтения/записи в текстовом режиме, при котором служебные символы заменяются. Возможно, следунт использовать "rb"/"wb" в качестве бинарного режима, в котором данные читаются и записываются без изменений.
while ((fp = fopen(filename, "rb")) == NULL){ printf("Cannot open file %s\n", filename); printf("Input filename: "); gets(filename); } |
|||
|
||||
![]()
|
| Правила форума "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. |