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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2012, 21:49   #1
cooky
Новичок
Джуниор
 
Регистрация: 26.02.2012
Сообщений: 1
По умолчанию Что с моим кодом не так?

задача
На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N строк имеет следующий формат:
<Фамилия> <Имя> <оценки>,
где <Фамилия> – строка, состоящая не более чем из 20 символов, <Имя> – строка, состоящая не более чем из 15 символов, <оценки> – через пробел три целых числа, соответствующие оценкам по пятибалльной системе. <Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом. Пример входной строки:
Иванов Петр 4 5 3
Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран фамилии и имена трех худших по среднему баллу учеников. Если среди остальных есть ученики, набравшие тот же средний балл, что и один из трех худших, то следует вывести и их фамилии и имена.


А вот мое "решение":
Код:
#include <iostream>
#include <string.h>
#include <math.h>

struct data
{
 	 int sum;
 	 char *user;
};

void packer (char *tmpD, data *pupin, int i)
{
	pupin[i].user = new char[37];
	pupin[i].user = strtok(tmpD," ");
	strcat(pupin[i].user, " ");
	strcat(pupin[i].user, strtok(NULL," "));

	pupin[i].sum=atoi(strtok(NULL," "))+atoi(strtok(NULL," "))+atoi(strtok(NULL," "));

}

int main()
{
	int N=4;
	int const S=43;
	data *pupin = new data [N];
	char *tmpData = new char[S] ;

	for (int i=0; i<N; i++)
	{
		std::cout<<"Введите данные участника:"<<std::endl;
		std::cin.getline(tmpData,S);
		packer ( tmpData, pupin, i);
	}

	data min1, min2, min3;
	min1.sum=min2.sum=min3.sum=15;


	for(int i=0; i<N; i++)
	{
		if(pupin[i].sum<=min1.sum)
		{
			data tmp=min1;
			min1=pupin[i];
			min3=min2;
			min2=tmp;
		}
		else if (pupin[i].sum<=min2.sum)
		{
			min3=min2;
			min2=pupin[i];
		}
		else if(pupin[i].sum <= min3.sum)
			min3=pupin[i];
	}

	std::cout<<"Ученики с наименьшими результатом:"<<std::endl
		<<min1.user<<std::endl
		<<min2.user<<std::endl
		<<min3.user<<std::endl;
	
	for(int i=0; i<N; i++)
		if(pupin[i].sum==min3.sum)
			std::cout<<pupin[i].user<<std::endl;

	int r;
	std::cin>>r;
		
}
Не могу разобраться, почему во время выполнения программы все время вылазят ошибки "доступа" и ghjxtt.. разъясните,пожалуйста,что здесь не так..п.с.компилировал на Visual Studio 2010

Последний раз редактировалось Stilet; 26.02.2012 в 21:56.
cooky вне форума Ответить с цитированием
Старый 28.02.2012, 15:10   #2
bloker
 
Регистрация: 26.04.2010
Сообщений: 3
По умолчанию

попробуй выделить динамическую память под char *user
bloker вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что с кодом grafgrial Общие вопросы Delphi 9 24.05.2010 11:11
Подскажите, что не так с кодом Grisha248 Помощь студентам 2 24.05.2009 16:41
Что с кодом ? Look Общие вопросы C/C++ 11 06.11.2007 14:48