Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
1

Записать и считать таблицу, которая задана вектором

12.04.2015, 16:16. Показов 668. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь записать и считать таблицу, которая задана вектором:

C
1
2
3
4
5
struct Item {
    int key;
    int release;
    char *info;
};
Почему-то info у меня не считывается.

Записываю функцией:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void saveTable(struct Item *table, int n) {
    FILE *fp;
    int i;
    if ((fp = fopen("data.db", "wb")) == NULL) {
        printf("Open error\n");
        return;
    }
    for (i = 0; i <= n - 1; i++) {
        printf("%d", &table[i]);
        if (fwrite(&table[i], sizeof(struct Item), 1, fp) != 1)
            printf("Write error\n");
    }
    fclose(fp);
}
Считываю функцией:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
struct Item * load(int *n) {
    int i,test;
    FILE *fp;
    struct Item *table;
 
    if ((fp = fopen("data.db", "rb")) == NULL) {
        printf("File db not exists\n");
        *n=0;
        return NULL;
    }
    else
        table = malloc(sizeof(struct Item));
    for (i = 0; ; i++) {
        if (feof(fp)){
        i--;
                break;
                }
        table = realloc(table, sizeof(struct Item) * (i + 1));
        fread(&table[i], sizeof(struct Item), 1, fp);
    }
    fclose(fp);
    *n = i;
    return table;
}
Не могу понять, в каком месте я теряю info при считывании или при записи...

Где я допустил ошибку?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2015, 16:16
Ответы с готовыми решениями:

Считать таблицу с .xlsx (Excel 2007) и записать в Grid
Проблема в том, что если читать .xls, то все нормально функционирует, если же .xlsx, вылетает...

Найти угол между радиус-вектором и вектором скорости
Здравствуйте! Помогите пожалуйста в решении задачи Закон движения точки имеет вид r=at2i+bt3j ,...

Как записать таблицу с форм (DataGridView) в таблицу БД (MS SQL Server)?
вытягиваю данные из БД Код: public ArrayList GetAllDishs() { ArrayList...

По функции f(i,j),которая задана
1. ПО функции f(i,j),которая задана, необходимо сформировать квадратную матрицу A = {aij}, i,j =...

4
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
12.04.2015, 17:06 2
Записывать надо не указатель (info), а саму строку.
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
12.04.2015, 17:10  [ТС] 3
Somebody,
Вот так?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void saveTable(struct Item *table, int n) {
    FILE *fp;
    int i;
    if ((fp = fopen("data.db", "wb")) == NULL) {
        printf("Open error\n");
        return;
    }
    for (i = 0; i <= n - 1; i++) {
        printf("%d", &table[i]);
        //if (fwrite(&table[i], sizeof(struct Item), 1, fp) != 1)
           //   printf("Write error\n");
           fwrite(&table[i], sizeof(struct Item), 1, fp);
           fwrite(table[i].info, sizeof(table[i].info), 1, fp);
    }
    fclose(fp);
}
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
12.04.2015, 18:27 4
записывать надо вот так
C
1
2
3
fwrite(&table[i].key, sizeof(int), 1, fp);
fwrite(&table[i].release, sizeof(int), 1, fp);
fwrite(table[i].info, sizeof(char), strlen(table[i].info), fp);
Добавлено через 45 секунд
читать соответственно
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
12.04.2015, 18:42  [ТС] 5
Я переписал свой код в вот это:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
void saveTable(struct Item *table, int n) {
    FILE *fp;
    int i, key, rel;
    char inf[256];
    if ((fp = fopen("data.db", "wb")) == NULL) {
        printf("Open error\n");
        return;
    }
    for (i = 0; i <= n - 1; i++) {
        key = table[i].key;
        rel = table[i].release;
        strcpy(&inf, table[i].info);
        // fwrite(&table[i], sizeof(struct Item), 1, fp);
        // fwrite(table[i].info, sizeof(table[i].info), 1, fp);
        if (fwrite(&key, sizeof(key), 1, fp) != 1)
            printf("Error on write key!!\n");
        if (fwrite(&rel, sizeof(rel), 1, fp) != 1)
            printf("Error on write rel!!\n");
        if (fwrite(&inf, sizeof(inf), 1, fp) != 1)
            printf("Error on save info!!\n");
    }
    fclose(fp);
}
 
struct Item * load(int *n) {
    int i, test;
    int key;
    int rel;
    char inf[256];
    FILE *fp;
    struct Item *table;
 
    if ((fp = fopen("data.db", "rb")) == NULL) {
        printf("File db not exists\n");
        *n = 0;
        return NULL;
    }
    else
        table = malloc(sizeof(struct Item));
    for (i = 0; ; i++) {
        if (feof(fp)) {
            i--;
            break;
        }
        table = realloc(table, sizeof(struct Item) * (i + 1));
        // fread(&table[i], sizeof(struct Item), 1, fp);
        // fread(table[i].info, sizeof(table[i].info), 1, fp);
        fread(&key, sizeof(key), 1, fp);
        fread(&rel, sizeof(rel), 1, fp);
        fread(&inf, sizeof(inf), 1, fp);
        table[i].key = key;
        table[i].release = rel;
        table[i].info = malloc(sizeof(char) * strlen(inf));
        strcpy(table[i].info, inf);
        if (feof(fp)) {
            break;
        }
    }
    fclose(fp);
    *n = i;
 
    return table;
}
Это работает. Но это ппц быдло код какой-то =(
Как можно красивее это сделать?
0
12.04.2015, 18:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2015, 18:42
Помогаю со студенческими работами здесь

Задана символьная матрица размером NxM.Определить кол-во различных элементов(Повторяющиеся считать только 1 раз).
Помогите пожалуйста . Не могу создать динамческий символьный массив. Остальную часть вроде уже...

в файле input.txt задана вещественно значимая матрица 3×4 считать эту матрицу в компонент stringrid
в файле input.txt задана вещественно значимая матрица 3×4 считать эту матрицу в компонент...

Создать таблицу → Считать в двумерный массив → Вывести в таблицу
Добрый день. Необходимо создать динамическую таблицу M x N, считать из нее данные и вывести...

Помогите написать программу, которая вводит фактические данные в таблицу, и выводит на экран таблицу
Помогите написать программу, которая вводит фактические данные в таблицу, и выводит на экран...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru