Форум программистов, компьютерный форум CyberForum.ru

Массив струкур - C++

Восстановить пароль Регистрация
 
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
19.03.2012, 15:06     Массив струкур #1
Здравствуйте! В универе задали написать лабу, такое вот задание:
Определить структурированный тип и набор функций для работы с таблицей записей, реализованной в массиве структур. В перечень функций входят:

· ввод записи таблицы с клавиатуры;
· загрузка и сохранение таблицы в текстовом файле;
· просмотр таблицы;
· сортировка таблицы в порядке возрастания заданного поля;
· поиск в таблице элемента с заданным значением поля или с наиболее близким к нему по значению;
· удаление записи;
· изменение (редактирование) записи;
· вычисление с проверкой и использованием всех pfgbctq по заданному условию и формуле (например, общая сумма на всех счетах).

Запоролся уже на вводе, т.к. вылазит ошибка при вводе строки. Подскажите, что нужно исправить. Вот код:

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
#include<iostream>
#include<fstream>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<new>
 
using namespace std;
 
void create_base(int n);
 
struct base {
    int pnumber;
    int snumber;
    char* txt;
    int dd,mm,yy;} base_list;
 
void main()
    {
    setlocale(LC_ALL,"russian");
    char c;
    int n;
           cout << "1 - Новая таблица, 2 - Загрузка таблицы" << endl;
    for(;;1) {
        c=getchar();
        if ((c == '1') || (c == '2')) break;}
    if (c == '1') {cout << "Введите количество записей таблицы:" << endl;
            cin >> n;
            create_base(n);
            }
    if (c == '2') cout << "Загрузка таблицы";
    _getch();
    }
 
void create_base(int n)
    {   base* arr;
        ofstream f("file.txt");
        arr = (base*)calloc(n, sizeof(base));
        cout << "Введите записи:" << endl;
        for (int i=0; i<n; i++) {
            cin >> arr[i].pnumber >> arr[i].snumber;
            gets(arr[i].txt);
            f << arr[i].pnumber << endl << arr[i].snumber << endl << endl;
            for(int j=0; j<strlen(arr[i].txt); j++)
                f << arr[i].txt[j];
            }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 15:06     Массив струкур
Посмотрите здесь:

C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
C++ Задать массив вещественных чисел и вставить в исходный массив число
C++ Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W
C++ задача записать в массив отрицательные элементы матрицы в массив и вывести их
Массив: Переписать элементы одномерного массива A, попадающие в интервал [2, 6], в массив B. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
19.03.2012, 16:43     Массив струкур #2
Цитата Сообщение от Kulibin474 Посмотреть сообщение
Определить структурированный тип
Мне кажется это должно выглядеть так:
C++
1
2
3
4
5
6
7
8
9
typedef struct
{
    int pnumber;
    int snumber;
    char* txt;
    int dd,mm,yy;
} base;
 
base base_list;
А на счет char *gets( char * str ) - это функции не нравится ваш указатель. Попробуйте сначала
C++
1
2
arr[i].txt = new char[256];
А потом уже gets( arr[i].txt );
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
20.03.2012, 11:24  [ТС]     Массив струкур #3
Немного переделал create_base, посчитал, что calloc и new смешивать как-то не очень. Также в определение структурного типа добавил typedef. Но все равно все работает криво, программа записывает в файл вот что:

86
16

-33686019
-1414812757

John

И при этом срабатывает ввод только одной записи
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void create_base(int n)
    {   base* arr;
        ofstream f("file.txt");
        arr = new base[n-1];
        cout << "Введите записи:" << endl;
        for (int i=0; i<n; i++) {
            cin >> arr[i].pnumber >> arr[i].snumber;
            arr[i].txt = new char[256];
            gets(arr[i].txt);
            f << arr[i].pnumber << endl << arr[i].snumber << endl << endl;
            for(int j=0; j<strlen(arr[i].txt); j++)
                f << arr[i].txt[j];
            }
           }
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
20.03.2012, 12:50     Массив струкур #4
Программа почему-то путается при работе с cin и gets. То останавливается и ждет ввода с клавиатуры, то просто игнорирует функцию gets. Не могу объяснить данное явление. Надо попробовать переделать структуру функции, вариантов больше у меня нет.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.03.2012, 14:03     Массив струкур #5
Цитата Сообщение от Mustik Посмотреть сообщение
Программа почему-то путается при работе с cin и gets. То останавливается и ждет ввода с клавиатуры, то просто игнорирует функцию gets. Не могу объяснить данное явление.
А вот не нужно смешивать стили ввода данных С и С++, не будет таких странностей. На самом деле и объект сласса istream (cin) и функция чтения из потока (gets) буферизируют ввод, но делают это по-разному. В результате тот ввод, которого ждёт gets, может в буфере cin дожидаться, когда это его оттуда прочитают...
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
21.03.2012, 09:43     Массив струкур #6
Цитата Сообщение от easybudda Посмотреть сообщение
А вот не нужно смешивать стили ввода данных С и С++, не будет таких странностей.
Пробовал заменять gets на cin.getline, не помогало.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2012, 17:00     Массив струкур
Еще ссылки по теме:

Массивы и указатели (нужно передать массив I[10] в массив J[10] в обратной последовательности) C++
Заполнить массив строк из файла. Массив заполняется, но выводится не корректно C++
Как в массив скопировать массив, который заполнен через указатели C++

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

Или воспользуйтесь поиском по форуму:
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
21.03.2012, 17:00  [ТС]     Массив струкур #7
Такая же проблема, cin.getline не помогает. Не знаю что и делать
Yandex
Объявления
21.03.2012, 17:00     Массив струкур
Ответ Создать тему
Опции темы

Текущее время: 03:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru