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

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

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

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

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

Нуждаюсь в помощи. Сделал программу, но есть проблема с поиском.
Задание: создать программу, которая бы обеспечивала создание, просмотр, дополнения и извлечение данных из файла, содержащего сведения об автомобиле состоящие из названия его марки, номера, фамилии владельца. Данная информация о 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2014, 21:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в программе. Структура "Автомобиль" (C++):

Структура "Автомобиль". Контейнер "Рынок б/у автомобилей" - C++
Как реализовать такую структуру? 1. Найти иномарки стоимостью до 300тыс. руб. Предусмотреть в программе меню, позволяющее...

Структура «Преподаватель» с полями "ФИО", "стаж", "категория", "нагрузка" - C++
Функция - расчёт зарплаты по нагрузке и оплате часа для определенной категории. Категория Оплата часа Вторая 150 Первая 200 ...

Структура "Сканер". Нужны советы профессионалов по программе - C++
Программа ПОЧТИ работает, очень все сырое, код мне кажется мог быть и короче. Прошу Вас, эксперты, указать явные недоработки и как было бы...

Ошибка в программе. Замена буквы "О" на "о" - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; main() { int S=0, a, Sum; for (int i = 1; i &lt;=3; i++) for (int j = 1; j &lt;=5; j++) { ...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Структура: error C2079: "A::myElem" использует неопределенный struct "A::B" - C++
class A { public: struct B; private: B myElem; }; struct A::B {

4
zss
Модератор
Эксперт С++
6578 / 6140 / 2022
Регистрация: 18.12.2011
Сообщений: 15,999
Завершенные тесты: 1
23.04.2014, 21:54 #2
Стандартная ошибка.
if(vodmark==x.mark)
При сравнении текстов надо сравнивать строки, а не их адреса
C++
1
if(strcmp(vodmark,x.mark)==0)
0
Bogdan_Fateev
0 / 0 / 0
Регистрация: 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
zss
Модератор
Эксперт С++
6578 / 6140 / 2022
Регистрация: 18.12.2011
Сообщений: 15,999
Завершенные тесты: 1
23.04.2014, 22:05 #4
Посмотрите строки в отладчике.
Возможно в одной из них нет символа '\n' в конце, а в другой есть.
0
Bogdan_Fateev
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 10
23.04.2014, 22:57  [ТС] #5
Да не в этом суть. 2 одинаковых сообщений выбивает.
Ну и к тому же, все равно дает 0.
0
23.04.2014, 22:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2014, 22:57
Привет! Вот еще темы с ответами:

Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9" - C++
class Hdd { public: char Hdd_name; int total_space; int free_space; int speed; Hdd *next; Hdd *previous; };

Структура ORDER с полями "номер счета плательщика", "номер счета получателя" и "сумма платежа" - C++
написать структуру ORDER. с полями 1.номер счета плательщика 2.счета получателя 3.сумма платежа

Ошибка в программе, где создается шаблон класса "стек" - C++
Задача:Гаражная стоянка имеет одну стояночную полосу, причем единственный въезд и единственный выезд находятся в одном конце полосы. Если...

Ошибка "Необработанное исключение" в программе с strlen и strtok - C++
Из заданной текстовой строки распечатать только те слова, которые начинаются и оканчиваются одной и тоже буквой, используя функции...


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

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

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