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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2012, 01:59   #1
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию Проблема с выводом типа double

Доброго времени суток форумчане. Нужно написать программу, которая запрашивает у пользователя данные о 5 студентах(Имя, фамилию и год рождения, а так же 5 оценок) и выводит Фамилию Имя Год и средний балл. Вроде написал, но проблема с выводом среднего балла.. выводит мусор.

Код:
#include <stdio.h>

struct man
{
	char fam[20];
	char name[20];
	int year, ocenki[5],sum[5];
	double sr;
};
void main()
{
	int i,k;
	man x[5];
	for(i=0;i<5;i++)
	{
		printf("----- STUDENT NOMER %d -----\n",i+1);
		printf("Enter name: ");
		gets(x[i].name);
		printf("Enter year: ");
		scanf("%d",&x[i].year);
		fflush(stdin);
		printf("Enter lastname: ");
		gets(x[i].fam);
		printf("Enter five marks:\n");
		for(k=0;k<5;k++)
		{
			printf("Mark %d: ",k+1);
			scanf("%d",&x[k].ocenki[k]);
			x[k].sum[k]+=x[k].ocenki[k];
		}
		fflush(stdin);
	}
	for(i=0;i<5;i++)
	{
		x[i].sr=(double)x[i].sum[i]/(double)5;
	}
	for(i=0;i<5;i++)
	{
		printf("%d\n",x[i].sum[i]);
		printf("%s %s %d Sredni bal %2.lf\n",x[i].fam,x[i].name,x[i].year,x[i],x[i].sr);
	}
}
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 20.02.2012, 02:56   #2
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Код:
&x[i].year
&x[k].ocenki[k]
Зачем тут оператор взятия адреса? Из-за этого и вылезает мусор.
crymchanin вне форума Ответить с цитированием
Старый 20.02.2012, 03:14   #3
ArmanPrestige
Главное желание.
Форумчанин
 
Регистрация: 28.11.2011
Сообщений: 122
По умолчанию

Цитата:
Сообщение от crymchanin Посмотреть сообщение
Код:
&x[i].year
&x[k].ocenki[k]
Зачем тут оператор взятия адреса? Из-за этого и вылезает мусор.
не пойму. конкретнее пожалуйста. амперсанд там для того, чтобы записать данные которые ввел пользователь.
проблема именно с оценками, и средним баллом. с 'year' проблем нету, все верно выводиться
Я могу, Я хочу, Я буду!
ArmanPrestige вне форума Ответить с цитированием
Старый 20.02.2012, 03:58   #4
crymchanin
Пользователь
 
Аватар для crymchanin
 
Регистрация: 01.02.2012
Сообщений: 84
По умолчанию

Цитата:
Сообщение от ArmanPrestige
не пойму. конкретнее пожалуйста. амперсанд там для того, чтобы записать данные которые ввел пользователь.
проблема именно с оценками, и средним баллом. с 'year' проблем нету, все верно выводиться
Я ошибся. Подумал что там символьная переменная.

Тут несколько ошибок:
1) Ошибка с индексами массива
Код:
		for(k=0;k<5;k++)
		{
			printf("Mark %d: ",k+1);
			scanf("%d",&x[k].ocenki[k]);
			x[k].sum[k]+=x[k].ocenki[k];
		}
Должно быть так:
Код:
		for(k=0;k<5;k++)
		{
			printf("Mark %d: ",k+1);
			scanf("%d",&x[i].ocenki[k]);
			x[i].sum[k]+=x[i].ocenki[k];
		}
2) Мусор появляется из-за того, что выполняется арифметическое вычисление с переменной структуры которая не инициализирована.
Код:
x[k].sum[k]+=x[k].ocenki[k];
Нужно либо сделать так, в каждой итерации основного цикла:
Код:
x[i].sum[k] = 0;
Либо заполнить память нулями используя memset:
Код:
memset(&x[i], 0, sizeof(man));
crymchanin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отбросить дробную часть от числа типа double не выходит! Си apraxie Помощь студентам 3 17.12.2011 00:18
[C++]Генерация случайных чисел типа double во всем диапазоне Peek-a-boo Помощь студентам 0 25.03.2011 13:29
Чтение данных типа double введенных с клавиатуры Vinnipux Общие вопросы по Java, Java SE, Kotlin 1 16.11.2010 08:22
in Формула типа String out результат типа Double Gypsy Общие вопросы Delphi 3 16.04.2010 10:21