Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2015, 19:07   #1
alinka---
 
Регистрация: 22.11.2015
Сообщений: 8
По умолчанию не могу найти ошибку в программе на C++: не работает функция вывода

почему не работает функция вывода? помогите найти ошибку, что не так

Код:
#include<iostream>
#include<conio.h>
#include<string.h>
#include<iomanip>
using namespace std;
struct types
{
    char name[5];
	int place;
	int price;
	int monday; 
	int tuesday; 
	int wednesday; 
	int thursday; 
	int friday; 
	int saturday; 
	int sunday; 
};
struct flight
{
	char name[10];
	types type[5];
	int ntype;
};
struct richtung
{
	char name [15];
	flight reis[5];
	int nflight;
};
richtung city[5];
int n;

void input()
{
	int nflight, n, ntype;
    char answer_richt;     //параметр закінчення введення даних про напрям
    char answer_pln;       //параметр завершення введення даних про рейси
    char answer_tp;
    int i = 0;        //початкова кількість напрямів
	do{
		cout << "enter richtung: ";
		cin >> city[i].name;
		int j = 0;
		do{
			cout << "flight number: ";
			cin >>city[i].reis[j].name;
			int k = 0;
			do{
				cout << "type plane: ";
				cin >> city[i].reis[j].type[k].name;
				cout << "number place: ";
				cin >> city[i].reis[j].type[k].place;
				cout << "price: ";
				cin >> city[i].reis[j].type[k].price;
				cout << "flight days: ";
				cout << "Monday(0/1): "; cin >> city[i].reis[j].type[k].monday; cin.ignore();
				cout << "Tuesday(0/1): "; cin >> city[i].reis[j].type[k].tuesday; cin.ignore();
				cout << "Wednesday(0/1): "; cin >> city[i].reis[j].type[k].wednesday; cin.ignore();
				cout << "Thursday(0/1): "; cin >> city[i].reis[j].type[k].thursday; cin.ignore();
				cout << "Friday(0/1): "; cin >>city[i].reis[j].type[k].friday; cin.ignore();
				cout << "Saturday(0/1): "; cin >> city[i].reis[j].type[k].saturday; cin.ignore();
				cout << "Sunday(0/1): "; cin >> city[i].reis[j].type[k].sunday; cin.ignore();
				k++;
				cout << "any type else (j/n)" << endl;
					answer_tp = getch();
			} while (answer_tp != 'n');
			city[i].reis[j].ntype = k;
		    j++;
			cout << "any flight else? (j/n)" << endl;
			answer_pln = getch();
		} while (answer_pln != 'n');
		city[i].nflight = j;                //кількість рейсів
		cout << "continue input? (j/n)" << endl;
		answer_richt = getch();
		i++;
	} while (answer_richt != 'n');
	n = i;
}
void output()
{
	for (int i = 0; i < n; i++)
	{
		cout << "***************************************************" << endl;
		cout << "richtung: " << city[i].name << endl;
		cout << "***************************************************" << endl;
		cout << "flightNumber --------type plane-----number place----------price----------days" << endl;
		for (int j = 0; j <city[i].nflight; j++)
		{
			for (int k = 0; k < city[i].reis[j].ntype; k++)
			{
				cout << setw(9) << city[i].reis[j].name << setw(13) << city[i].reis[j].type << setw(17) 
                                      << city[i].reis[j].type[k].place << setw(17) << city[i].reis[j].type[k].price << endl;
				cout << "days: ";
				if (city[i].reis[j].type[k].monday == 1) {
					cout << "monday ";
				}
				if (city[i].reis[j].type[k].tuesday == 1) {
					cout << "tuesday ";
				}
				if (city[i].reis[j].type[k].wednesday == 1) {
					cout << "wednesday ";
				}
				if (city[i].reis[j].type[k].thursday == 1) {
					cout << "thursday ";
				}
				if (city[i].reis[j].type[k].friday == 1) {
					cout << "friday ";
				}
				if (city[i].reis[j].type[k].saturday == 1) {
					cout << "saturday ";
				}
				if (city[i].reis[j].type[k].sunday == 1) {
					cout << "sunday ";
				}
			}
			
			cout << "----------------------------------------------------" << endl;
		}
	}	
	
	
}
int main()
{
	input();
	output();
	system("pause");
}

Последний раз редактировалось Stilet; 16.12.2015 в 19:22.
alinka--- вне форума Ответить с цитированием
Старый 16.12.2015, 19:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что именно в ней не работает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.12.2015, 19:41   #3
alinka---
 
Регистрация: 22.11.2015
Сообщений: 8
По умолчанию

void output не работает, почему то сразу вылетает из цикла for
alinka--- вне форума Ответить с цитированием
Старый 16.12.2015, 20:18   #4
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

А если посмотреть на значение переменной n?
У вас она (n) определена, но не инициирована.
Код:
...
richtung city[5];
int n;

void input()
...
void output()
{
	for (int i = 0; i < n; i++)
...
Код:
...
int main()
{
	input();
	output();
	system("pause");
}

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.12.2015, 20:26   #5
alinka---
 
Регистрация: 22.11.2015
Сообщений: 8
По умолчанию

здесь же n инициализована вроде

cout << "continue input? (j/n)" << endl;
answer_richt = getch();
i++;
} while (answer_richt != 'n');
n = i;
alinka--- вне форума Ответить с цитированием
Старый 16.12.2015, 20:37   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

А вот и нет!
У Вас n определена в процедуре
Код:
void input()
{
	int nflight, n, ntype;
...
По выходу из этой процедуры про эту n можно забыть.

Переменная, описанная в программе размещается в области данных, а переменная описанная в п/п - в области стека.
Это совершенно разные переменные, хотя и с одним именем.

Так что та n, про которую написал я, не инициализирована.
Перечитайте тему "Локальные и глобальные переменные".

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 16.12.2015, 22:27   #7
alinka---
 
Регистрация: 22.11.2015
Сообщений: 8
По умолчанию

и как же мне это исправить?
alinka--- вне форума Ответить с цитированием
Старый 17.12.2015, 15:09   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Есть два пути.
1. Объявить переменную глобально, перед процедурой input(), а в теле процедуры input() объявление переменной n убрать.
2. При описании процедуры input() использовать параметр и через него вернуть в программу то значение, которое n получила.

В общем случае предпочтительнее вариант передачи значений через параметры.
Объявление глобальных переменных - это для другого уровня проектов.

Впрочем, о параметрах и способах передачи данных в процедуру/функцию лучше внимательно перечитать.

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти в программе ошибку Ween24 Помощь студентам 13 27.10.2015 22:01
Ошибку не могу найти в программе Веселина Паскаль, Turbo Pascal, PascalABC.NET 7 26.05.2011 20:44
Не могу найти ошибку в программе lioshenka Общие вопросы C/C++ 5 24.08.2009 11:38
Не могу найти ошибку в программе Dawystrik Общие вопросы Delphi 9 19.03.2009 21:19