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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
#1

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

19.03.2012, 15:06. Просмотров 555. Ответов 6
Метки нет (Все метки)

Здравствуйте! В универе задали написать лабу, такое вот задание:
Определить структурированный тип и набор функций для работы с таблицей записей, реализованной в массиве структур. В перечень функций входят:

· ввод записи таблицы с клавиатуры;
· загрузка и сохранение таблицы в текстовом файле;
· просмотр таблицы;
· сортировка таблицы в порядке возрастания заданного поля;
· поиск в таблице элемента с заданным значением поля или с наиболее близким к нему по значению;
· удаление записи;
· изменение (редактирование) записи;
· вычисление с проверкой и использованием всех 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];
            }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2012, 15:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив струкур (C++):

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y - QBasic
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y. ...

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а - Turbo Pascal
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41 ошибку выдает. Что делать? Вот...

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B - C (СИ)
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив C, который будет состоять из чисел,...

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C - Pascal
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C.

6
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 );
0
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];
            }
           }
0
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
20.03.2012, 12:50 #4
Программа почему-то путается при работе с cin и gets. То останавливается и ждет ввода с клавиатуры, то просто игнорирует функцию gets. Не могу объяснить данное явление. Надо попробовать переделать структуру функции, вариантов больше у меня нет.
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,813
20.03.2012, 14:03 #5
Цитата Сообщение от Mustik Посмотреть сообщение
Программа почему-то путается при работе с cin и gets. То останавливается и ждет ввода с клавиатуры, то просто игнорирует функцию gets. Не могу объяснить данное явление.
А вот не нужно смешивать стили ввода данных С и С++, не будет таких странностей. На самом деле и объект сласса istream (cin) и функция чтения из потока (gets) буферизируют ввод, но делают это по-разному. В результате тот ввод, которого ждёт gets, может в буфере cin дожидаться, когда это его оттуда прочитают...
0
Mustik
56 / 56 / 2
Регистрация: 10.07.2011
Сообщений: 229
21.03.2012, 09:43 #6
Цитата Сообщение от easybudda Посмотреть сообщение
А вот не нужно смешивать стили ввода данных С и С++, не будет таких странностей.
Пробовал заменять gets на cin.getline, не помогало.
0
Kulibin474
0 / 0 / 0
Регистрация: 19.03.2012
Сообщений: 5
21.03.2012, 17:00  [ТС] #7
Такая же проблема, cin.getline не помогает. Не знаю что и делать
0
21.03.2012, 17:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2012, 17:00
Привет! Вот еще темы с ответами:

Массив: Отсортировать полученный массив 3 способами: по строкам, по столбцам( возр.), 3) и весь массив - Delphi
Помогите, пожалуйста ,решить задачу. Очень нужно. Задан массив (4*6). Элементы задаются по правилу: если j&gt;3, то Aij=i+j, иначе...

Массив: Как сделать так, чтобы результирующий массив представлял собой измененный по заданным правилам первый массив? - C++ Builder
Доброй ночи форумчане, очередной нубо-вопрос не требует отлагательств имеется одномерный массив, из которого по заданным условиям...

Массив. Разделить на два: массив элементов с четными и массив с нечетными индексами - Pascal ABC
VII.Одномерные массивы 50. Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы исходного массива...

Вывести массив а(i, j), одномерный массив b(i) и полученный массив АВ с помощью функции Cells - VBA
Задача 1 Написать программу для решения следующей задачи: для числа n вводимого с клавиатуры (с помощью функции InputBox())...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru