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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2013, 10:32   #1
Climber-18
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 31
Восклицание Прерывание цикла

Нужно прервать цикл после того, как выведет количество записей указанное в начале (переменная n в коде). Вро де бы всё правильно, но цыкл не прерывается, а если после вывода пишу brake, то выводит одну запись вместо указанного количества. Помогите, подскажите
Код:
#include <iostream.h>
#include <windows.h>
void main ()
{
	struct std
	{
		char fio [20];
		int g_r;
		int g_p;
		int os;
		int yaz_pr;
		int v_math;
		int eng;
		float sr_b;
	
	}; std*e;
	int n;
	int i;
	char sob [60], sob1[79];
	CharToOem("Укажите количество записей",sob);
	cout<<sob<<'\n';
	cin>>n;
	e=new std [n];
	for(i=0;i<n;i++)
	{
		CharToOem("Введите фамилию  для ",sob);
		cout<<sob<<i+1;
		CharToOem("-го студента ",sob1);
		cout<<sob1;
		cin>>e[i].fio;
		CharToOem("Введите год рождения для ",sob);
		cout<<sob<<i+1;
		cout<<sob1;
		cin>>e[i].g_r;
		CharToOem("Введите год поступления для ",sob);
		cout<<sob<<i+1;
		cout<<sob1;
		cin>>e[i].g_p;
		CharToOem("Введите оценку по предмету OC для ",sob);
		cout<<sob<<i+1;
		cout<<sob1;
		cin>>e[i].os;
		CharToOem("Введите оценку по предмету Языки Программирования для ",sob);
		cout<<sob<<i+1;
		cout<<sob1;
		cin>>e[i].yaz_pr;
		CharToOem("Введите оценку по предмету Высшая Математика для ",sob);
		cout<<sob<<i+1;
		cout<<sob1;
		cin>>e[i].v_math;
		CharToOem("Введите оценку по предмету Английский Язык для ",sob);
		cout<<sob<<i+1;
		cout<<sob1;
		cin>>e[i].eng;
		e[i].sr_b=((e[i].os+e[i].yaz_pr+e[i].v_math+e[i].eng)/4.0);
	}
	CharToOem ("___________________________________________________________________",sob);
cout<<sob<<'\n';
	CharToOem ("|Фамилия  |  Год    |    Год    |__________Оценки______| Сред.балл|",sob);
cout<<sob<<'\n';
	CharToOem ("|студента |рождения |поступления|ОС |ЯП |МАТЕМ| English|           ",sob);
cout<<sob<<'\n';
	CharToOem ("|         |         |               |   |     |        |",sob);
cout<<sob<<'\n';
int o_sr_b=0;
for(i=0;i<n;i++)
	{

	cout<<e[i].fio<<"      "<<e[i].g_r<< "       "<<e[i].g_p<<"      "<<e[i].os<<"    "<<e[i].yaz_pr<<"    "<<e[i].v_math<<"      "<<e[i].eng<<"       "<<e[i].sr_b<<'\n';
	o_sr_b+=e[i].sr_b;


	}
CharToOem("Общий среднийбал",sob);
cout<<sob<<'\n';
cout<<o_sr_b<<"=>"<<sob<<'\n';

}

Последний раз редактировалось Climber-18; 06.06.2013 в 22:50.
Climber-18 вне форума Ответить с цитированием
Старый 06.06.2013, 13:19   #2
Shad0wF1rst
Форумчанин
 
Регистрация: 11.01.2013
Сообщений: 149
По умолчанию

Я думал для этого и существует условие конца цикла.
Может это и чушь, но это моя чушь и я ее никому не отдам.
Shad0wF1rst вне форума Ответить с цитированием
Старый 06.06.2013, 17:56   #3
Climber-18
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Shad0wF1rst Посмотреть сообщение
Я думал для этого и существует условие конца цикла.
А как его описать?
Climber-18 вне форума Ответить с цитированием
Старый 06.06.2013, 19:52   #4
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Как цикл не прерывается?
Выясните почему зацикливает с помощью пошаговой отладки.
Igor95 вне форума Ответить с цитированием
Старый 06.06.2013, 20:22   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Если n у Вас количество записей, а цикл выполняется пока верно условие i < n. По логике работы цикла, он завершится когда условие станет false. Зачем нужен break, не понимаю
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 06.06.2013, 22:47   #6
Climber-18
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Если n у Вас количество записей, а цикл выполняется пока верно условие i < n. По логике работы цикла, он завершится когда условие станет false. Зачем нужен break, не понимаю
c brake я просто експерементировал
Climber-18 вне форума Ответить с цитированием
Старый 06.06.2013, 22:48   #7
Climber-18
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Как цикл не прерывается?
Выясните почему зацикливает с помощью пошаговой отладки.
берёт и не прерывается. Консоль заливает нулями и в итоге закрывается программа
Climber-18 вне форума Ответить с цитированием
Старый 06.06.2013, 23:19   #8
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
std [n]
Точно не уверен, но пробела быть не должно.
Используйте отладчик для выявления значения переменных
Igor95 вне форума Ответить с цитированием
Старый 07.06.2013, 06:04   #9
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Вот держите... Оформление вывода данных с Вас...
Код:
#include <iostream>
#include <cstdlib>

using namespace std;

struct student
{
	char surname[20];	// Фамилия
	int yearBirth;		// Год рождения
	int yearAdmission;	// Год поступления
	int subjOS;		// Оценка по предмету ОС
	int subjProgLang;	// Оценка по предмету языки программирования	
	int subjMath;		// Оценка по предмету математика
	int subjEng;		// Оценка по предмету английский язык
	double GPA;		// Средний балл
};

int main()
{
	student *st;
	int n;				// Количество записей
	double OGPA = 0;	// Общий средний бал
	
	system("chcp 1251 > nul");

	cout << "\n Введите количество записей: ";	cin >> n;

	st = new student[n];		// Динамическое выделение памяти под массив записей
	
	cout << "\n Ввод данных:" << endl;
	for(int i = 0; i < n; i++)
	{
		cout << " ------------------------- \n Студент " << i + 1 << endl; 
		cout << " Фамилию: ";				cin >> st[i].surname;
		cout << " Год рождения: ";			cin >> st[i].yearBirth;
		cout << " Год поступления: ";			cin >> st[i].yearAdmission;
		cout << " ------------------\n Оценки по предметам:" << endl;
		cout << " Операционные системы: ";		cin >> st[i].subjOS;
		cout << " Языки программирования: ";	cin >> st[i].subjProgLang;
		cout << " Математика: ";			cin >> st[i].subjMath;
		cout << " Английский язык: ";			cin >> st[i].subjEng;
		
		st[i].GPA = ((st[i].subjOS + st[i].subjProgLang + st[i].subjMath + st[i].subjEng)/4.0);
	}

	for(int i = 0; i < n; i++)
	{
		cout << st[i].surname << "  " << st[i].yearBirth << "  " << st[i].yearAdmission << "  ";
		cout << st[i].subjOS << "  " << st[i].subjProgLang << "  " << st[i].subjMath << "  " << st[i].subjEng << "  ";
		cout << st[i].GPA << endl;
		OGPA += st[i].GPA;
	}
	
	cout << "\n\n Общий средний бал: " << OGPA << endl;
	system("pause");
return 0;
}
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 07.06.2013, 15:56   #10
Climber-18
Пользователь
 
Регистрация: 30.01.2013
Сообщений: 31
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Вот держите... Оформление вывода данных с Вас...
Код:
#include <iostream>
#include <cstdlib>

using namespace std;

struct student
{
	char surname[20];	// Фамилия
	int yearBirth;		// Год рождения
	int yearAdmission;	// Год поступления
	int subjOS;		// Оценка по предмету ОС
	int subjProgLang;	// Оценка по предмету языки программирования	
	int subjMath;		// Оценка по предмету математика
	int subjEng;		// Оценка по предмету английский язык
	double GPA;		// Средний балл
};

int main()
{
	student *st;
	int n;				// Количество записей
	double OGPA = 0;	// Общий средний бал
	
	system("chcp 1251 > nul");

	cout << "\n Введите количество записей: ";	cin >> n;

	st = new student[n];		// Динамическое выделение памяти под массив записей
	
	cout << "\n Ввод данных:" << endl;
	for(int i = 0; i < n; i++)
	{
		cout << " ------------------------- \n Студент " << i + 1 << endl; 
		cout << " Фамилию: ";				cin >> st[i].surname;
		cout << " Год рождения: ";			cin >> st[i].yearBirth;
		cout << " Год поступления: ";			cin >> st[i].yearAdmission;
		cout << " ------------------\n Оценки по предметам:" << endl;
		cout << " Операционные системы: ";		cin >> st[i].subjOS;
		cout << " Языки программирования: ";	cin >> st[i].subjProgLang;
		cout << " Математика: ";			cin >> st[i].subjMath;
		cout << " Английский язык: ";			cin >> st[i].subjEng;
		
		st[i].GPA = ((st[i].subjOS + st[i].subjProgLang + st[i].subjMath + st[i].subjEng)/4.0);
	}

	for(int i = 0; i < n; i++)
	{
		cout << st[i].surname << "  " << st[i].yearBirth << "  " << st[i].yearAdmission << "  ";
		cout << st[i].subjOS << "  " << st[i].subjProgLang << "  " << st[i].subjMath << "  " << st[i].subjEng << "  ";
		cout << st[i].GPA << endl;
		OGPA += st[i].GPA;
	}
	
	cout << "\n\n Общий средний бал: " << OGPA << endl;
	system("pause");
return 0;
}
Спасибо больше конечно, н можно было просто сказать в чём проблема))
Climber-18 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операторы цыкла в VBA Gerks Microsoft Office Excel 2 07.05.2013 15:16
Выведение елементов цыкла amator_roma Общие вопросы C/C++ 3 15.06.2011 14:43
возврашение функции (оператор цыкла do while) DANATER Помощь студентам 1 13.04.2011 20:57
задачи:простейшие циклы,цыкл и разветвление,обработка последственности цыкла Chibi Помощь студентам 12 22.11.2010 19:57
Приостановка цыкла for to do и дальнейшее продолжение работы s1d0r Общие вопросы Delphi 4 27.05.2009 16:58