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

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

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

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

28.12.2013, 13:36. Просмотров 193. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2013, 13:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти ошибку. Динамические массивы (C++):

Динамические структуры. Стек (помогите найти ошибку) - C++
помогите найти ошибку. Есть задание: построить стек, элементами которого являются слова текста,которые считываются из текстового файла....

Найти минимальную и максимальную цифру в числе (динамические массивы) - C++
Здравствуйте, господа знатоки. Это мой первый опыт в использовании динамических массивов. Мне кажется, что код программы не является...

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

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

Динамические массивы. Найти наибольшие элементы каждой строки матрицы Х и записать их в массив Y - C++
Найти наибольшие элементы каждой строки матрицы Х и записать их в массив Y. Размер Марицы вводить с клавиатуры, а элементы разместить в...

Динамические массивы и функции. Динамические массивы. - C++
Дана матрица 6х8 целого типа. Создать одномерный массив, содержащий элементы матрицы, кратные числу, введенному с клавиатуры.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6472 / 3120 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
28.12.2013, 16:51 #2
Del/Не всмотрелся.
0
Lorence
0 / 0 / 0
Регистрация: 26.09.2009
Сообщений: 14
29.12.2013, 10:27  [ТС] #3
Ап темы.
Никто так и не сможет помочь?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2013, 10:27
Привет! Вот еще темы с ответами:

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

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

Массивы. Найти среднее арифметическое элементов массива, расположенных до максимального элемента (найти ошибку в задании) - C++
Препод говорит что тут есть ошибка, но где не говорит, прошу если кото-нибуть заметит сообщите. Ввести одномерный статический массив...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой находится наименьшее // количество...


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

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

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