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

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

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

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

28.12.2013, 13:36. Просмотров 186. Ответов 2
Метки нет (Все метки)

Всем доброго времени суток!
Прошу помочь найти ошибку в коде и разобраться с динамическими массивами =)

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

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

Код программы:
Кликните здесь для просмотра всего текста
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++
Найти наибольшие элементы каждой строки матрицы Х и записать их в массив Y. Размер Марицы вводить с клавиатуры, а элементы разместить в...

Динамические массивы. Найти сумму элементов матрицы, которые имеют заданную разницу индексов - C++
Добрый вечер. Помогите с заданием, я что-то вообще не могу понять как его делать. Найти сумму элементов матрицы, которые имеют...

ДИНАМИЧЕСКИЕ МАССИВЫ.Найти номер строки, в которой сумма отрицательных нечетных элементов самая большая - C++
не знаю почему не правильно считает ведь все правильно сделал?(( подскажите кто нибуть Пожалуста #include &lt;iostream&gt; #include &lt;cmath&gt; ...

Массивы. Найти ошибку - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int nArg; double summ = 0; cout &lt;&lt; &quot;kol-vo elementov...

Массивы (найти ошибку в коде) - C++
В чем проблема? #include &lt;iostream&gt; using namespace std; int main() { int a; cin &gt;&gt; a; int *b = new int ;

Массивы (найти ошибку в коде) - C++
При компилировании программы (это не полный код) пишет что b-должно быть константное выражение #include &lt;iostream&gt; #include &lt;locale&gt; ...

Не могу найти ошибку. Массивы. - C++
Есть задание: Найти номер первого максимального значения среди элементов, меньших Т и расположенных правее первого элемента, кратного 3. ...

Задача на двумерные массивы (найти ошибку) - C++
На строчке где, по-идее, программа должна делать замену Dev-C++ пишет ошибку. Помогите разобраться, пожалуйста. /* Дана...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6423 / 3062 / 304
Регистрация: 04.12.2011
Сообщений: 8,353
Записей в блоге: 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     Найти ошибку. Динамические массивы
Ответ Создать тему
Опции темы

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