so the 3rd function calls on the read_integer(prompt) from the int read_integer(string prompt) above it, seen by the ***** marks, but I am not sure what to add so that this works. My attempt in the below code doesn't spit out the month after the user puts an integer from 1-12. The function is to utalise structs and enums to read out a knights name, age, armour, and birthmonth. It is the birthmonth that doesnt work so far. I am a beginner coder btw
#include "splashkit.h"
#include <string>
using namespace std;
string read_string(string prompt)
{
string result;
write(prompt);
result = read_line();
return result;
}
**********
int read_integer(string prompt)
{
string result;
write(prompt);
result = read_line();
return convert_to_integer(result);
}
***********
int read_birthmonth(string prompt)
{
string line;
int monthno;
monthno = read_integer(prompt);
while (monthno>12) //forces the user to only enter integers
up to 12
{
write_line("Please enter a value from 1 to 12: ");
monthno=read_integer(prompt);
}
return monthno;
}
int read_armour(string prompt)
{
string line;
string armour;
int armourno;
armourno = read_integer(prompt);
while(armourno!=1 && armourno!=2) //while loop makes sure
the user has to pick either 1 or 2
{
write_line("Please enter 1 for Chain Mail and 2 for
Plate Armour: ");
armourno = read_integer(prompt);
}
return armourno;
}
string select_armour(int armourno) //function to return
armour type, from 1 or 2 via prompt
{
string armourtype;
if (armourno==1)
{
armourtype="Chain Mail"; //if this chosen it returns
chain mail
}
else
{
armourtype="Plate Armour"; //else it returns plate
armour
}
return armourtype;
}
string select_month(int monthno) //use a switch function so
that a number from 1 to 12 can be picked
{
string monthname;
switch(monthno)
{
case 1:
monthname = "January";
break;
case 2:
monthname = "February";
break;
case 3:
monthname = "March";
break;
case 4:
monthname = "April";
break;
case 5:
monthname = "May";
break;
case 6:
monthname = "June";
break;
case 7:
monthname = "July";
break;
case 8:
monthname = "August";
break;
case 9:
monthname = "September";
break;
case 10:
monthname = "October";
break;
case 11:
monthname = "November";
break;
case 12:
monthname = "December";
break;
}
}
struct knight_data
{
string name;
int age;
string birthmonth;
string armour;
};
knight_data read_knight() //questions asked to user
{
knight_data result;
result.name = read_string("Enter your name, knight: ");
result.age = read_integer("How old are you?: ");
int birthmonthno=read_birthmonth("What month were you born
in (month number 1-12)?: ");
result.birthmonth=select_month(birthmonthno); //based of the
number from 1 to 12
int armourno=read_armour("What armour do you have? 1. for
Chain Mail, or 2. for Plate Armour: ");
result.armour=select_armour(armourno);
return result;
}
void write_knight(const knight_data &knight) //outputing
{
write_line("Greetings Knight: " knight.name "\nAged: "
to_string(knight.age));
write_line("Your birth month is: " knight.birthmonth);
write_line("Your armour type is: " knight.armour);
}
enum knight_update_option //enumerator function
{
UPDATE_NAME,
UPDATE_AGE,
UPDATE_BIRTH_MONTH,
UPDATE_ARMOUR,
FINISH_UPDATE
};
knight_update_option read_knight_data_option() //when choose
a number it updates it via enumeralot
{
int result;
write_line("1: Update name");
write_line("2: Update age");
write_line("3: Update birth month");
write_line("4: Update armour");
write_line("5: Finish update");
result = read_integer("Select option: ")-1;
return static_cast<knight_update_option>(result);
}
void update_knight(knight_data &knight) //actually updating
values via switch
{
int option;
int birthmonthno;
int armourno;
do
{
write_line();
write_line("***Update Knight***");
write_knight(knight);
write_line();
option=read_knight_data_option(); //the 1-5 updates from
lines 180-184
switch(option)
{
case UPDATE_NAME:
knight.name = read_string("Enter new name: ");
break;
case UPDATE_AGE:
knight.age = read_integer("Enter new age: ");
break;
case UPDATE_BIRTH_MONTH:
birthmonthno = read_birthmonth("What new month
were you born in (month number 1-12)?: ");
knight.birthmonth = select_month(birthmonthno);
break;
case UPDATE_ARMOUR:
armourno = read_armour("What new armour do you
have? 1. for Chain Mail, or 2. for Plate Armour: ");
knight.armour = select_armour(armourno);
break;
case FINISH_UPDATE:
break;
}
} while(option!=FINISH_UPDATE);
}
int main() //main function - calls on read, write, and
update
knight functions
{
knight_data k1, k2;
k1 = read_knight();
write_knight(k1);
update_knight(k1);
write_line("After the update:");
write_knight(k1);
return 0;
}
CodePudding user response:
You are not returning anything from select_month
. Add:
return monthname;