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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
#1

Структура.Найтиде ошибку - C++

19.04.2009, 22:37. Просмотров 1448. Ответов 21
Метки нет (Все метки)

Вот код. Он компилируется, работает, но с странностями.
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
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
using namespace std;
#define istr 21
struct train{
    int num;
    char naz[istr];
    char time[istr];
};
int pro1(int n,train *p,int num1);
int pro2(int n,train* p,char naz1[istr]);
void nom(int num1,train* p,int n);
void stan(int n,train* p,char naz1[istr]);
 
int main(int argc,char* argv[])
{
    setlocale(LC_ALL,".1251");
    int i,n,num1;
    char naz1[istr];
    cout << "Информацию о скольких поездов следует занести в базу данных?" << endl;
    cin >> n;
    train *p,*a;
    a = new train[n];
    p = &a[0];
    for(i = 0; i < n;i++){
        _flushall();
        cout << "Введите информацию о " << i+1 << " поезде." << endl;
        cout << "Введите номер поезда: №";
        cin >> p->num;_flushall();
        cout << "Введите станцию назначения поезда: ";
        cin.getline(p->naz,istr);
        cout << "Введите время оправления поезда: ";
        cin.getline(p->time,istr);
        p++;
    }
    cout << endl;
    cout << "Введите искомый номер поезда: ";
    cin >> num1;
    _flushall();
    cout << endl;
    p = &a[0];
    while (pro1(n,p,num1)){
        cout << "Поезд с номером №" << num1 << " не найден в базе данных." << endl;
        cout << "Введите новый искомый номер поезда: №";
        cin >> num1;
    }
    cout << "Поезд с номером №" << num1 << " найден в базе данных." << endl; 
    p = &a[0];
    nom(num1,p,n);
    cout << endl;
    _flushall();
    cout << "Введите искомую станцию назначения: ";
    cin.getline(naz1,istr);
    p = &a[0];
    while(pro2(n,p,naz1)){
        cout << naz1 << " - данная конечная станция не найдена в базе данных." << endl;
        cout << "Введите новую ускомую станцию назначения: ";
        cin.getline(naz1,istr);
    }
    cout << naz1 << " - станция назначения найдена в базе данных." << endl;
    p = &a[0];
    stan(n,p,naz1);
    delete[]a;
    system("PAUSE");
    return 0;
}
int pro1(int n,train *p,int num1){
    int i;
    for(i = 0; i < n;i++){
        if (num1 == p->num)
            return(0); else
            return(1);
        p++;
    }
}
int pro2(int n,train* p,char naz1[]){
    int i;
    for(i = 0; i < n;i++){
        if (stricmp(naz1,p->naz) == 0)
            return(0);else
            return(1);
        p++;
    }
}
void nom(int num1,train* p,int n){
    int i;
    for(i = 0; i < n;i++){
        if (num1 == p->num){
            cout << "Поезд №" << num1 << " оправляется в " << p->time << endl;
            cout << "до станции " << p->naz << endl;
        }
        p++;
    }
}
void stan(int n,train* p, char naz1[]){
    int i;
    for(i = 0;i < n;i++){
        if (stricmp(naz1,p->naz) == 0){
            cout << "До станции " << p->naz << " следует: " << endl;
            cout << "Поезд №" << p->num << endl;
            cout << "в " << p->time << endl;
        }
        p++;
    }
}
А вот работа программы.
Структура.Найтиде ошибку
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2009, 22:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структура.Найтиде ошибку (C++):

Структура (найти ошибку в этом коде) - C++
Добрый день. Возникла такая проблема, не могу найти ошибку в этом коде, выводит непонятные символы. Уже все перепробовал) #include...

исправить ошибку в коде с++(структура данных) - C++
определить структурный тип,содержащий следующую информацию: фио риелтора,тип квартиры,кол-во комнат,стоимость,дата продажи. ввести 5...

Найти и исправить ошибку в программе (структура Student) - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; typedef struct TStudent { char surname; long marks; ...

Структура Octal. Выдает ошибку E2040 Declaration terminated incorrectly. Не пойму в чем проблема? - C++
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; struct Octal {char*s;int len;} chislo ; {for(int...

В текстовом файле структура – информация о компьютерах. Структура с полями: название, стоимость. - C++
Ребят, помогите пожалуйста, 29 июня экзамен по &quot;Основы программирования&quot;,кто сколько сможет сделать задач, тем всей группой поставим &quot;+&quot;...

Структура «База», сущности «Универсам» и «Продукты», структура «Товар» - C++
1. Создать структуру «База», включающую не менее 3 полей. 2. Создать сущности «Универсам» и «Продукты» описанной структуры. 3. Создать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Викдон
67 / 67 / 4
Регистрация: 21.11.2008
Сообщений: 226
19.04.2009, 22:39 #2
и в чем проявляются странности?
0
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
19.04.2009, 23:13  [ТС] #3
Вот условие задачи:
(Автоматизированная информационная система на жд вокзале содержит инфо о отправлении поездов.
Для каждого поезда указывается:
· номер поезда;
· станция назначения;
· время отправления.
Данные в информационной системе организованы в виде линейного списка.!!!!!

Составить программу, которая:
· обеспечивает первоначальный ввод данных в информационную систему и формирование линейного списка;
· производит вывод всего списка;
· вводит номер поезда и выводит все данные об этом поезде;
· вводит название станции назначения и выводит данные обо всех поездах, следующих до этой станции.
Походу сам код неправильно написан. На рис. там видно, что неправильно ищет номер и станцию.
0
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
19.04.2009, 23:24 #4
Код
int pro1(int n,train *p,int num1){
        int i;
        for(i = 0; i < n;i++){
                if (num1 == p->num)
                        return(0); else
                        return(1);
                p++;
        }
Если искомый номер находится не в 0-й ячейке, то при таком условии он не будет найден никогда. Надо:
C
1
2
3
4
5
6
7
8
9
10
int pro1(int n, train *p, int num1)
{
   int i;
   for(i = 0; i < n; i++) {
      if(num1 == p->num)
         return 0;
      p++;
   }
   return 1;
}
В поиске станции у тебя аналогичная ошибка.
1
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
19.04.2009, 23:33 #5
См. строки 72-74. На первой же итерации цикла у тебя будет выход из процедуры. Ветку else надо удалить, а Return 1 влепить в конец процедуры. Аналогично строки 80-82

Добавлено через 33 секунды
Упс... опередели
1
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 01:53  [ТС] #6
Ещё вопрос, а можно как-то вернутся к моменту задания первого вопроса в коде(строка 53) без использования цикла, ну не совсем без цикла,чтобы цикл только спрашивал и переправлял на 53 строчку?
0
KoppeKTop
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 02:20 #7
Цитата Сообщение от insolent Посмотреть сообщение
Ещё вопрос, а можно как-то вернутся к моменту задания первого вопроса в коде(строка 53) без использования цикла, ну не совсем без цикла,чтобы цикл только спрашивал и переправлял на 53 строчку?
Обычно кусок кода, который нужно повторять обрамляется в while(1) { ... } и если пользователь вводит спец. команду, например "exit", то делается break;
0
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 02:30  [ТС] #8
Цитата Сообщение от KoppeKTop Посмотреть сообщение
Обычно кусок кода, который нужно повторять обрамляется в while(1) { ... } и если пользователь вводит спец. команду, например "exit", то делается break;
Это я знал, а как сделать, как я выше писал?
0
KoppeKTop
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 02:42 #9
Цитата Сообщение от insolent Посмотреть сообщение
чтобы цикл только спрашивал
Что спрашивал?
Цитата Сообщение от insolent Посмотреть сообщение
и переправлял на 53 строчку?
см. goto.
0
ISergey
Maniac
Эксперт С++
1374 / 885 / 52
Регистрация: 02.01.2009
Сообщений: 2,658
Записей в блоге: 1
20.04.2009, 04:46 #10
Цитата Сообщение от KoppeKTop Посмотреть сообщение
см. goto.
А может не надо?.
0
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 11:04  [ТС] #11
Ой, не цикл,а условие( типо "Хочете повторить поиск поезда?), если да - то назад к 53-й строчки, а если нет - exit(1).
0
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
20.04.2009, 13:38 #12
Лучше сделать свитч с кейсами: 1 - поиск номера, 2 - поиск станции, и зациклить его, пока не нажмем, скажем, 0.
0
KoppeKTop
11 / 11 / 1
Регистрация: 20.04.2009
Сообщений: 26
20.04.2009, 17:17 #13
Цитата Сообщение от ISergey Посмотреть сообщение
А может не надо?.
Конечно не надо! goto нужно использовать только в крайних случаях, а здесь без него спокойно можно обойтись.
А есть ещё варианты, как организовать переход к определенному месту кода НЕ используя цикла?

Цитата Сообщение от Gravity Посмотреть сообщение
Лучше сделать свитч с кейсами: 1 - поиск номера, 2 - поиск станции, и зациклить его, пока не нажмем, скажем, 0.
Это я уже писал, на это получил ответ:
Цитата Сообщение от insolent Посмотреть сообщение
Это я знал, а как сделать, как я выше писал?
Мы ведь не ищем лёгких путей

insolent, goto - это плохой стиль программирования, ведущий к образованию сложночитаемого и малопонятного спагетти-кода. В таких случаях принято пользоваться связкой while (1) { Проверка ввода пользователя + действия }.
0
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.04.2009, 17:31  [ТС] #14
Понятно. Значит только через цикл.
0
Evg
Эксперт CАвтор FAQ
17810 / 6016 / 388
Регистрация: 30.03.2009
Сообщений: 16,531
Записей в блоге: 26
20.04.2009, 20:35 #15
Цитата Сообщение от KoppeKTop Посмотреть сообщение
insolent, goto - это плохой стиль программирования, ведущий к образованию сложночитаемого и малопонятного спагетти-кода. В таких случаях принято пользоваться связкой while (1) { Проверка ввода пользователя + действия }.
Это большой вопрос. Слишком частое использование goto конечно превращает программу в бесконечную плохо понимаемую кишку, но вот конкретно в данном случая я бы порекомендовал человеку использовать goto. Просто по причине того, что у него (как видно из программы) ещё небольшой опыт в программировании и попытка сделать через цикл лишь приведёт к тому, что он ещё больше запутается в собственной программе. А использование goto в данном случае не повлечёт за собой никаких сложных дополнительных конструкций и с точки зрения понимания будет проще, чем использование цикла и ещё каких-либо семиэтажных наворотов. При условии, что это будет единственный goto в программе. Если их станет 2-3 и более, то программа почти наверняка станет плохопонимаемой
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2009, 20:35
Привет! Вот еще темы с ответами:

Структура DateTime, битовая структура - C++
Условие: Структура содержит информацию о дате и времени некоторого события: struct datetime { unsigned short Year; // год ...

Структура, доступная из всех файлов проекта ("глобальная" структура) - C++
Есть четыре структуры (body, gun, enemy, st), описанные в main.cpp. К main.cpp подключен хедер save.h, в котором имеется функция void...

Подскажите как исправить ошибку. прога ломается на 79 строке. а ошибку не выдает - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int chisla(int a,int b) { ...

Найти ошибку в программе: в visual studio выдает ошибку - C++
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { double x, E, ypred, y, S; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.04.2009, 20:35
Ответ Создать тему
Опции темы

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