Member 12863707 Ответов: 2

Почему моя программа не дает желаемого результата?


Я новичок в C++ и пишу программу, которая будет имитировать колонию кроликов. Программа автоматически добавит их и даст им имена, пол, возраст и т. д. Я медленно добавляю функции к кроликам и начинаю сначала с имен. Когда я компилирую и запускаю программу, я получаю этот вывод, какие-нибудь советы о том, как я могу решить эту проблему?

Выход:
Name:
Sex:
Color:
Age: 0

Name:
Sex:
Color:
Age: 0

Name:
Sex:
Color:
Age: 0

Name:
Sex:
Color:
Age: 0

Name:
Sex:
Color:
Age: 0


Что я уже пробовал:

#include <iostream>
#include <string>
#include <ctime> 
#include <vector>
#include <cstdlib>

using namespace std;

//void setSex( void );
char getSex();
//void setColor( void );
string getColor();
//void setAge( void );
int getAge();
//void setName( void );
string getName();
void printBunny();
int randomGeneration(int x);

//static std::string  POSSIBLE_NAMES = 18;
//static std::string   POSSIBLE_COLORS = 4;

static std::string possibleNames[] ={
	"Jen",
	"Alex",
	"Janice",
	"Tom",
	"Bob",
	"Cassie",
	"Louis",
	"Frank",
	"Bugs",
	"Daffy",
	"Mickey",
	"Minnie",
	"Pluto",
	"Venus",
	"Topanga",
	"Corey",
	"Francis",
	"London",
};
static std::string possibleColors[] ={
	
	"White",
    "Brown",
    "Black",
    "Spotted"
}; 

struct Bunny
{
	char sex;
	string color;
	int age;
	string name;

	bool radioactive_mutant_vampire_bunny;
	
	BunnyData()
	{
	//srand( time( 0 ) );

		setSex();
		setColor();
		setAge();
		setName();
	}
	
	int randomGeneration(int x){
		return rand() % x;
	}
	void setSex()
	{
		int randomNumber = 1 + rand() % 2;

		( randomNumber == 1 ) ? sex = 'm' : sex = 'f';
	}

	char getSex() 
	{
		return sex;
	}

	void setColor()
	{
		//color = possibleColors[ 0 + rand() % POSSIBLE_COLORS ];
	}

	string getColor() 
	{
		return color;
	}

	void setAge()
	{
		age = 0;
	}

	int getAge() 
	{
		return age;
	}

	void setName()
	{
		int i = randomGeneration(18);
		name = possibleNames[i];
		//name = possibleNames[ 0 + rand() % POSSIBLE_NAMES ];
	}

	string getName() 
	{
		return name;
	}

	void printBunny() 
	{
		cout << "Name: " << getName() << endl;
		cout << "Sex: " << getSex() << endl;
		cout << "Color: " << getColor() << endl;
		cout << "Age: " << getAge() << endl;
	}
};

int main()
{

	vector< Bunny > colony;

	cout << "Welcome to Bunny Graduation!" << endl << endl;

	for( int i = 0; i < 5; ++i )
	{
		colony.push_back( Bunny() );
	}

	for( int i = 0; i < 5; ++i )
	{
		colony[ i ].printBunny();
		cout << endl;
	}

	return 0;
}

Richard MacCutchan

Вы объявляете некоторые методы, которые не имеют никакого отношения к вашей структуре и должны быть удалены из вашего кода. Кроме того, при создании каждого объекта Bunny вы не инициализируете ни одно из его свойств.

2 Ответов

Рейтинг:
1

OriginalGriff

Используйте отладчик: поставьте точку останова в первой строке Main и пройдите через свою программу. На каждом этапе заранее продумывайте, что вы ожидаете, и когда это будет сделано, проверьте, было ли это именно то, что вы ожидали. Если это было так, прекрасно-переходите к следующей строке. Если нет, то почему? Что же произошло и чем это отличается от того, что вы ожидали?

Мы здесь не для того, чтобы делать это для вас, это часть вашей задачи. Так что пришло время вам освоить новый и полезный навык: отладку!


Рейтинг:
1

Patrice T

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.