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

Найти ошибку. Динамические массивы - C++

Восстановить пароль Регистрация
 
Lorence
0 / 0 / 0
Регистрация: 26.09.2009
Сообщений: 14
28.12.2013, 13:36     Найти ошибку. Динамические массивы #1
Всем доброго времени суток!
Прошу помочь найти ошибку в коде и разобраться с динамическими массивами =)

Текст задания: Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о. владельца, марка авто, год выпуска, страна производитель. Требуется найти: перечень владельцев с указанием числа их авто

Что не получается: написанный мною код некорректно считывает данные из файла Обрывает ФИО, перемешивает другие элементы строки и все в этом роде. С правиьностью поиска перечня авловладельцев с указанимем числа их авто, соответственно, тоже не разобраться, пока не исправить ввод данных, так что это не главное на данный момент.

Код программы:
Кликните здесь для просмотра всего текста
C++ (Qt)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <locale>
#include <cstdlib>
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <string.h>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
struct owner{
    char name[30];
    char model[10];
    int date;
    char country[10];
};
 
struct total{
    char name[30];
    int N;
};
 
owner *inputfile(int &m);
void outputowner(owner owners[], int m);
void output(total z[], int m);
void outputfile(total z[], int m);
total *kolauto(owner owners[], int m, int &k);
 
owner *inputfile(int &m){
    ifstream fin;
    int i;
    char file[10];
    char iniz[5];
    owner t;
    owner *owners;
 
    cout << "Имя файла:";
    cin >> file;
    fin.open(file);
 
    if(!fin){
        cout << "Файл не открыт. \n"; exit(1);
    }
 
    m=0;
    do {
        fin >> t.name >> iniz >> t.model >> t.date >> t.country; m++;
    }while(fin.good());
    //m--;
    fin.close();
 
    owners = new owner[m];
    if(!owners){
        cout << "нет динамической памяти"; getchar(); exit(1);
    }
 
    fin.open(file);
    if(!fin){
        cout << "Файл не открыт. \n"; exit(1);
    }
 
    for(i=0; i<m; i++){
        fin >> owners[i].name >> iniz >> owners[i].model >> owners[i].date >> owners[i].country;
        strcat(owners[i].name, " ");
        strcat(owners[i].name, iniz);
        i++;
    }
    fin.close();
    return owners;
}
 
void outputowner(owner owners[], int m){
    int i;
    cout  << "Фамилия и инициалы Марка авто Год выпуска Страна производитель\n";
    for(i=0; i<m; i++){
        cout<<setw(20)<<owners[i].name<<setw(10)<<owners[i].model<<setw(6)<<owners[i].date<<setw(10)<<owners[i].country << endl;
    }
}
 
void output(total z[], int m){
    int i;
    cout << "Ф.И.О.     Количество автомобилей \n";
    for(i=0; i<m; i++){
        cout  << i+1 << "  "  << z[i].name << "  " << z[i].N << endl;
    }
}
 
void outputfile(total z[], int m){
    ofstream fout;
    char file[10];
    int i;
    cout << "Имя файла: ";
    cin >> file;
    fout.open(file);
    if(!fout.good()){
        cout << "Файл не открыт. \n"; exit(1);
    }
 
    for(i=0; i<m; i++){
        fout  << i+1 << "  "  << z[i].name << "  " << z[i].N << endl;
    }
    fout.close();
}
 
total *kolauto(owner owners[], int m, int &k){
    int i, j, fl;
    total *p = new total[m];
    if(!p){
        cout << "Нет динамической памяти."; getchar(); exit(1);
    }
    k=0;
 
    for(i=0; i<m; i++){
        fl=1;
        for(j=0; j<k; j++)
            if(strcmp(owners[i].name, p[j].name) == 0){
                fl=1;
                p[j].N++;
            }
        if(fl==1){
            strcpy(p[k].name, owners[i].name);
            p[k].N=1;
            k++;
        }
    }
    return p;
}
int main() {
    setlocale(LC_ALL,"rus");
    owner *pst;
    int n, k=0;
    total *pz;
 
    pst = inputfile(n);
    cout << "Исходный массив структур. \n";
    outputowner(pst, n);
    pz=kolauto(pst, n, k);
 
    cout << "\nСписок автовладельцев и их количество автомобилей: \n";
    output(pz, k);
    outputfile(pz, k);
 
    delete []pst;
    delete []pz;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 13:36     Найти ошибку. Динамические массивы
Посмотрите здесь:

Не могу найти ошибку. Массивы. C++
C++ Массивы. Найти среднее арифметическое элементов массива, расположенных до максимального элемента (найти ошибку в задании)
C++ Динамические структуры. Стек (помогите найти ошибку)
C++ Динамические массивы. Найти наибольшие элементы каждой строки матрицы Х и записать их в массив Y
C++ Динамические массивы. Найти сумму элементов матрицы, которые имеют заданную разницу индексов
Динамические массивы С++ - найти строку с наибольшей и наименьшей суммой элементов C++
C++ ДИНАМИЧЕСКИЕ МАССИВЫ.Найти номер строки, в которой сумма отрицательных нечетных элементов самая большая
C++ Массивы (найти ошибку в коде)
Массивы (найти ошибку в коде) C++
Динамические массивы/ Найти из каждых столбцов мах элемент C++
Массивы. Найти ошибку C++
C++ Найти минимальную и максимальную цифру в числе (динамические массивы)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6230 / 2959 / 287
Регистрация: 04.12.2011
Сообщений: 7,899
Записей в блоге: 3
28.12.2013, 16:51     Найти ошибку. Динамические массивы #2
Del/Не всмотрелся.
Lorence
0 / 0 / 0
Регистрация: 26.09.2009
Сообщений: 14
29.12.2013, 10:27  [ТС]     Найти ошибку. Динамические массивы #3
Ап темы.
Никто так и не сможет помочь?
Yandex
Объявления
29.12.2013, 10:27     Найти ошибку. Динамические массивы
Ответ Создать тему
Опции темы

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