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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2016, 20:28   #1
Павел2517
Пользователь
 
Регистрация: 05.03.2016
Сообщений: 11
По умолчанию Классы структур на Си. Не могу понять ошибку

Перед условием (там где комментарий) в структуре какой то мусор, а не не те значение, которые я вводил. Почему? Функция Input в main работает и сохраняет, но как только доходит до Nahojdenie значения становятся не теми, которые я ввел.
Код:
#include <iostream>
#include <conio.h>
#include <Windows.h>

using namespace std;

struct Phone
{
	char proizvodit[20];
	double diagonal;
	int chasi;
};

void Input(Phone *s)
{
	cout << "Введите название производителя телефона: ";
	cin.get(s->proizvodit, 20);

	cout << "Введите диагональ телефона: ";
	cin >> s->diagonal;

	cout << "Введите кол-во часов работы телефона без зарядки: ";
	cin >> s->chasi;
	cin.get();  //cin получает из потока enter, а cin.get убирает его
}

void Nahojdenie(Phone *s, int n)
{
	for (int i = 0; i < n; i++)
	if (s[i].diagonal > 5)
		cout << "Телефон с диагональю больше 5: " << s->proizvodit << endl;
}
int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);

	setlocale(LC_CTYPE, "Russian");

	int const n = 3;
	Phone d[n];

	cout << "\t\t***Введите данные о телефоне***\n\n";

	for (int i = 0; i < n; i++)
	{
		Input(&d[i]);
		cout << endl;
	}
	system("cls");

	Nahojdenie(&d[n], n);//Здесь сбиваются все введенные данные, диагональ становится большим отрицательным числом
	cout << endl;        //Имя несет какие то непонятные символы, а часы большое положительное число
	
	int k = 0;

	for (int i = 0; i < n; i++)
		if (d[i].chasi > 120)
			k++;

		cout << "Кол-во телефонов работающих больше 120 часов: " << k << endl;

	_getch();
	return 0;
}
Павел2517 вне форума Ответить с цитированием
Старый 01.04.2016, 21:14   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Зачем вы &d[n] передаете если функция работает с ним как с массивом? Просто d передавайте.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 01.04.2016, 21:23   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,429
По умолчанию

Ну или хотя бы &d[0], а то полезли за границы массива и хотите там свои данные увидеть.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 02.04.2016, 07:35   #4
Павел2517
Пользователь
 
Регистрация: 05.03.2016
Сообщений: 11
По умолчанию

спасибо)) А то я всю голову сломал, а про границы забыл...
Павел2517 вне форума Ответить с цитированием
Старый 02.04.2016, 09:55   #5
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Классы структур на Си
Доставило, спасибо )))
Croessmah вне форума Ответить с цитированием
Старый 03.04.2016, 09:16   #6
Павел2517
Пользователь
 
Регистрация: 05.03.2016
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Доставило, спасибо )))
Сорри, бред написал, поздно было, не соображал уже
Павел2517 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача С++.Классы.Не могу понять ошибку. Олька22111995 Помощь студентам 1 24.12.2013 10:10
Не могу понять ошибку( Goshan82 Помощь студентам 0 23.06.2013 02:27
не могу понять ошибку Ioane Помощь студентам 4 17.03.2012 18:20
Массив структур. Не могу найти ошибку. Playa-RC Помощь студентам 1 03.12.2011 22:17
Не могу понять ошибку.. AvA_Splash Общие вопросы C/C++ 4 22.12.2010 00:24