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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2011, 15:31   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Массивы структур

Уважаемые, помогите разобраться в чем проблема.
Прпактики ради решаю задачу, в которой необходимо создать массив из 3х структур, далее ввести данные для каждого элемента для каждой структуры и вывести на экран.

Компилируется, но работает не корректно, так как не дает ввести имя в 2 и 3ей структуре.
Код:
#include <iostream>

using namespace std;

struct Bar 
{
	char name[20];
	double ves;
	int kkal;
};

int main()
{
	Bar snack[3]; 

	cout << "Name_1: ";
	cin.getline(snack[1].name, 20);

	cout << "Ves_1: ";
	cin >> snack[1].ves;

	cout << "Kkal_1: ";
	cin >> snack[1].kkal;

	cout << "Name_2: ";
	cin.getline(snack[2].name, 20);

	cout << "Ves_2: ";
	cin >> snack[2].ves;

	cout << "Kkal_2: ";
	cin >> snack[2].kkal;

	cout << "Name_3: ";
	cin.getline(snack[3].name, 20);

	cout << "Ves_3: ";
	cin >> snack[3].ves;
	
	cout << "Kkal_3: ";
	cin >> snack[3].kkal;

	cout << "\n" << snack[1].name << ", " << snack[2].name << ", " << snack[3].name << endl;
	cout << snack[1].ves << ", " << snack[2].ves << ", " << snack[3].ves << endl;
	cout << snack[1].kkal << ", " << snack[2].kkal << ", " << snack[3].kkal << endl;

	int x = 0;
	cin >> x;

	return 0;
}
А тут все работает как надо, единственное что не дает ввести в порядке "имя, вес, калории".
Код:
#include <iostream>

using namespace std;

struct Bar 
{
	char name[20];
	double ves;
	int kkal;
};

int main()
{
	Bar snack[3]; 

	cout << "Name_1: ";
	cin.getline(snack[1].name, 20);

        cout << "Name_2: ";
	cin.getline(snack[2].name, 20);

        cout << "Name_3: ";
	cin.getline(snack[3].name, 20);

	cout << "Ves_1: ";
	cin >> snack[1].ves;

	cout << "Ves_2: ";
	cin >> snack[2].ves;

        cout << "Ves_3: ";
	cin >> snack[3].ves;

        cout << "Kkal_1: ";
	cin >> snack[1].kkal;

	cout << "Kkal_2: ";
	cin >> snack[2].kkal;
	
	cout << "Kkal_3: ";
	cin >> snack[3].kkal;

	cout << "\n" << snack[1].name << ", " << snack[2].name << ", " << snack[3].name << endl;
	cout << snack[1].ves << ", " << snack[2].ves << ", " << snack[3].ves << endl;
	cout << snack[1].kkal << ", " << snack[2].kkal << ", " << snack[3].kkal << endl;

	int x = 0;
	cin >> x;

	return 0;
}
Может быть, есть другой путь решения?
L6go1as вне форума Ответить с цитированием
Старый 24.10.2011, 15:43   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

L6go1as

Может быть, есть другой путь решения?

секс в гамаке - оно конечно может и экстремально, но белые люди делают это в циклах ((Ж

Код:
std::istream& operator>>(std::istream& is, Bar& bar)
{
    return is >> bar.name >> bar.ves >> bar.kkal;
}

Bar snack[3];
for (size_t i=0; i<3; i++)
   std::cin >> snack[i];
Rififi вне форума Ответить с цитированием
Старый 24.10.2011, 15:58   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Rififi, циклами это всякий умеет. Лучше поделись, почему первый код не работает - это пока мне больше волнует, ибо цикл работает, а вот так, "в лоб" - нет.
L6go1as вне форума Ответить с цитированием
Старый 24.10.2011, 16:07   #4
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
почему первый код не работает
Индексация массива начинается с 0 !
An1ka вне форума Ответить с цитированием
Старый 24.10.2011, 16:28   #5
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от An1ka Посмотреть сообщение
Индексация массива начинается с 0 !
А точно... не уследил, а можно ли заменить
Код:
cin.get();
скажем на
Код:
cin.clear();
cin.ignore(255, '\n')
Программа работает с обоими, но что использовать лучше?
L6go1as вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ массивы структур atemiks Помощь студентам 6 15.08.2011 15:02
Массивы структур :( ( Proghelper Помощь студентам 3 12.12.2010 18:17
Массивы структур. Fiber Общие вопросы C/C++ 4 29.11.2010 21:16
массивы структур Tirendus Общие вопросы C/C++ 10 24.05.2010 15:17
массивы структур vasek123 Общие вопросы C/C++ 25 07.03.2009 20:13