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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Сделать запрос по максимальному проценту http://www.cyberforum.ru/cpp-beginners/thread1059338.html
Пишу курсовую, помогите с одним участком кода #include <iostream> #include <ctype.h> #include <conio.h> #include <fstream> #include <windows.h> #include <string.h> #include <locale.h> using namespace std;
C++ Алгоритм решения рекурсивных функций Цель: Прошу подсказать алгоритм решения рекурсивной функции. Задача: http://www.cyberforum.ru/cpp-beginners/thread1059286.html
Проверка папки на пустоту C++
Так как времени не было на это задание, пришлось сделать так: BOOL IsEmpty(const wchar_t* sPath) { HANDLE hFind; //дескриптор файла для "пробега" WIN32_FIND_DATAW FindFileData; //структура для описания найденного файла wchar_t DirPath; wcscpy(DirPath, sPath); wcscat(DirPath, L"\\*"); //ищем все файлы hFind = FindFirstFileW(DirPath, &FindFileData); //находим первый файл ...
C++ Обращение к методам базового класса (есть ли подобие base/super?)
Понятное дело, что можно обращаться к методам базового класса так: BaseClass::hisMethod(); Однако это зависимость от названия класса. Не очень это как-то. В C# есть слово base, в Java super. Есть ли подобие в C++? И как обращаться к базовому без применения его имени? Раньше об этом не задумывался, пока не начал производить рефакторинг кода и, было решено, переименовать класс после соединения...
C++ scanf проверка вводимого типа http://www.cyberforum.ru/cpp-beginners/thread1059268.html
как узнать, что пользователь ввёл не число а строку, если от него требовалось первое и запрос проходил через функцию scanf?
C++ Горит зачет! Определить сумму чисел с чётными номерами и произведение чисел с нечетными номерами Определить сумму чисел с чётными номерами и произведение чисел с нечетными номерами. Подсчитать количество слагаемых и количество сомножителей. При вводе числа 77566 закончить работу. Нужно написать на java или c ++ Добавлено через 34 минуты Господа помогите, пожалуйста. зачет горит! подробнее

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

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

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

Код программы:
Кликните здесь для просмотра всего текста
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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru