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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2012, 15:46   #1
Theseus
Пользователь
 
Аватар для Theseus
 
Регистрация: 11.02.2009
Сообщений: 29
Сообщение Программа работает странным образом

Если раскомментировать код в функции initial() то программа работает нормально. А в таком виде выводит только первый символ из структуры.
Компилятор Dev-C++ 5.2.0.2 В чём может быть проблема, ведь закомментированые строки всего лишь выводят переменные?

Код:
#include<iostream>
using namespace std;
struct CandyBar
{
	char name[20];
	double weight;
	int calorie;
};
char def_name[]="Millennium Munch";
void initial(CandyBar & candy, char * name=def_name, double weight=2.85, int calorie=350);
void show(CandyBar & candy);

int main()
{
	char choice;
	CandyBar candy;
	cout<<"chose mode d(defaul) or s(special)";
	cout<<"\nenter the letter (d/s): ";
	while(true)
	{
		cin>>choice;
		if(choice=='0') return 0;
		if(choice=='s'||choice=='d') break;
		cout<<"\aplease enter a corect letter: ";
	}
	if(choice=='d')
	{
		initial(candy);
		show(candy);
		return 0;
	}
	char * name=new char [20];
	*name=true;
	double weight=true;
	int calorie=true;
	while(true)
	{
		cout<<"\nname: ";
		cin.sync();
		cin.getline(name,20);
		if(name[0]=='0') break;
		cout<<"weight: ";
		cin>>weight;
		if(weight==0) break;
		cout<<"calorie: ";
		cin>>calorie;
		if(calorie==0) break;
		initial(candy, name, weight, calorie);
		show(candy);
	
	return 0;
	}
}
void initial(CandyBar & candy, char * name, double weight, int calorie)
{
	int i;
	for(int i=0; name[i]!='\0'; i++) candy.name[i]=name[i];
	candy.name[i+1]='\0';
	//cout<<"\ni="<<i;
	//cout<<"\nname[2] = "<<name[2];
	candy.weight=weight;
	candy.calorie=calorie;
}
void show(CandyBar & candy)
{
	cout<<endl;
	cout<<candy.name<<endl;
	cout<<candy.weight<<endl;
	cout<<candy.calorie<<endl;
}

Последний раз редактировалось Theseus; 26.06.2012 в 16:20.
Theseus вне форума Ответить с цитированием
Старый 26.06.2012, 16:41   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

а зачем таким хитрым образом копировать строку name в candy.name?
чем strcpy() не устроила?
а если глобальнее -- зачем char, если можно взять string?
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На ноуте туго и со странным скрипом нажимаються клавиши pufystyj Компьютерное железо 0 28.01.2012 02:01
Программа работает пошагово, но не работает при запуске -Katerina- Microsoft Office Excel 3 12.07.2011 03:40
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56
Программа должна случайным образом составлять правильно построенные арифметические выражения MrsSmith Помощь студентам 0 05.05.2010 11:54
Скрипт не работает должным образом! Подскажите, что в скрипте не верно? Qwertys777 PHP 10 02.12.2009 09:40