Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 07.04.2014
Сообщений: 10
1

Ошибка в программе. Структура "Автомобиль"

23.04.2014, 21:50. Показов 685. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нуждаюсь в помощи. Сделал программу, но есть проблема с поиском.
Задание: создать программу, которая бы обеспечивала создание, просмотр, дополнения и извлечение данных из файла, содержащего сведения об автомобиле состоящие из названия его марки, номера, фамилии владельца. Данная информация о 20 автомобилей. Организовать поиск количества автомобилей каждой марки.
Проблема в том, что при поиске выводит "0" вместо нужного количества марок.
Например, я введу 2 машины с маркой "лада", а выводит вместо "2" "0".

Вот код:

Кликните здесь для просмотра всего текста
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
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 <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
//---------------------------------------------------------------------------
struct ant
{
int kod;
char mark[15];
char fam[15];
double nomer;
};
FILE *f,*g;
ant x;
 
//stvorenn9
void stv(void)
{ if ((f=fopen("x.dat","w"))==NULL)
{perror("Fail uje suwestvuet");
getch();
exit(1);
}
cout<<"\n Vvedite inform avtomobilya\n";
do
{cout<<"\n Vvedite marku avtomobilya: ";
cin>>x.mark;
cout<<"\n Vvedite nomer avtomobilya: ";
cin>>x.nomer;
cout<<"\n Vvedite familiu vladelca: ";
cin>>x.fam;
fwrite(&x,sizeof(x),1,f);
}
while(getch()!=27);
fclose(f);
}
 
//dopolnenie
void dop(void)
{ if ((f=fopen("x.dat","a"))==NULL)
{perror("Fail uje sywestvuet");
getch();
exit(1);
}
cout<<"\n Vvedite inform avtomobilya\n";
do
{cout<<"\n Vvedite marku avtomobilya: ";
cin>>x.mark;
cout<<"\n Vvedite nomer avtomobilya: ";
cin>>x.nomer;
cout<<"\n Vvedite prizvuwe vladelca: ";
cin>>x.fam;
fwrite(&x,sizeof(x),1,f);
}
while(getch()!=27);
fclose(f);
}
 
//peresmotr
void per(void)
{ if ((f=fopen("x.dat","r"))==NULL)
{perror("Fail uje suwestvuet");
getch();
exit(1);
}
cout<<"\n Vvedite inform avtomobilya: \n";
while(fread(&x,sizeof(x),1,f)!=NULL)
{cout<<"\n Vvedite marku avtomobilya: "<<x.mark;
cout<<"\n Vvedite nomer avtomobilya: "<<x.nomer;
cout<<"\n Vvedite prizvuwe vladelca: "<<x.fam;
getch();
}
fclose(f);
}
 
//DEl
void del(void)
{ if ((f=fopen("x.dat","r"))==NULL)
{perror("Fail uje suwestvuet");
getch();
exit(1);
}
if((g=fopen("x1.dat","w"))==NULL)
{perror("Fail uje suwestvuet");
getch();
exit(1);
}
cout<<"\n Vvedite inform avtomobilya: \n";
while(fread(&x,sizeof(x),1,f)!=NULL)
{cout<<"\n Vvedite marku avtomobilya: "<<x.mark;
cout<<"\n Vvedite nomer avtomobilya: "<<x.nomer;
cout<<"\n Vvedite prizvuwe vladelca: "<<x.fam;
cout<<"\n\n UDALITE(y/n)?";
if(getch()=='n') fwrite(&x,sizeof(x),1,g);
}
fclose(f);
fclose(g);
unlink("x.dat");
rename("x1.dat","x.dat");
}
 
//dolg
void count(void)
{ char vodmark[15];
if((f=fopen("x.dat","r"))==NULL)
{perror("Fail uje sywestvuet");
getch();
exit(1);
}
cout<<"\nvvedite marku\n";
cin>>vodmark;
 int k=0;
while(fread(&x,sizeof(x),1,f))
if(vodmark==x.mark) k++;
cout<<"\n Kolichestvo marok: "<<k;
getch();
}
#pragma argsused
int main(int argc, char* argv[])
{
 int r;
clrscr();
do
{
clrscr();
cout<<"\n\n\n\t\t GLAVNOE MEHU \n\t1-SOZDANIE\n\t2-PERESMOTR";
cout<<"\n\t3-DOPOLNENIE\n\t4-DELETE\n\t5-PODSCHET\n\t6-BUXOD\n\t REGUM?\n\t";
cin>>r;
switch(r)
{case 1:{stv();break;}
case 2:{per();break;}
case 3:{dop();break;}
case 4:{del();break;}
case 5:{count();break;}
case 6:exit(1);
}
}
while(1);
 
        return 0;
}
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2014, 21:50
Ответы с готовыми решениями:

Структура «Автомобиль»
С полями «Автомобиль»: производитель; цвет; серийный номер; регистрационный номер; год выпуска; год...

Структура - Автомобиль
Структура - Автомобиль. Структура должна включать соответствующие поля: марка, завод изготовитель,...

Создать иерархии наследования: автомобиль - легковой автомобиль, грузовой автомобиль – внедорожник
Создать иерархии наследования: автомобиль - легковой автомобиль, грузовой автомобиль – внедорожник.

Структура Автомобиль. Что не так?
Вроде работает, сортирует, вот только выдает что-то странное. Нормальная марка всегда только у 2...

4
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
23.04.2014, 21:54 2
Стандартная ошибка.
if(vodmark==x.mark)
При сравнении текстов надо сравнивать строки, а не их адреса
C++
1
if(strcmp(vodmark,x.mark)==0)
0
0 / 0 / 1
Регистрация: 07.04.2014
Сообщений: 10
23.04.2014, 22:01  [ТС] 3
C++
1
2
1
if(strcmp(vodmark,x.mark)==0)
Эм, да нет, все равно. Может ошибка есть до этого? Все равно 0.
Изменилось только то, что если я ввожу 2 одинаковые марки автомобилей, то выводится 2 сообщения, что марок 0. Если введу 3 маки, выводит 3 одинаковых сообщений.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
23.04.2014, 22:05 4
Посмотрите строки в отладчике.
Возможно в одной из них нет символа '\n' в конце, а в другой есть.
0
0 / 0 / 1
Регистрация: 07.04.2014
Сообщений: 10
23.04.2014, 22:57  [ТС] 5
Да не в этом суть. 2 одинаковых сообщений выбивает.
Ну и к тому же, все равно дает 0.
0
23.04.2014, 22:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2014, 22:57
Помогаю со студенческими работами здесь

Создать абстрактный класс Автомобиль и производные классы Легковой автомобиль,Грузовой автомобиль, Тягач
1) Создать класс Автомобиль, в котором есть закрытые поля Название, Скорость, конструктор с двумя...

Структура Автомобиль на си
Доброе время суток. Помогите разобраться, есть структура автомобиль, которая записывается в...

Задать массив размерностью 3, элементами которого является структура "Автомобиль"
Народ помогите программу написать завтра зачет сдавать.... Задать массив размерностью 3,...

Структура "автомобиль", вывести данные про автомобили, которым больше 2 лет
«Автомобиль»: марка; цвет; серийный номер; регистрационный номер; год выпуска; год техосмотра;...

Структура "Автомобиль", сортировка по модели автомобиля
Помогите найти ошибки в коде. Сортировка по модели не происходит, как исправить? Заранее спасибо....

Создать иерархии наследования: легковой автомобиль, грузовой автомобиль – внедорожник
Создать иерархии наследования: легковой автомобиль, грузовой автомобиль – внедорожник.


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru