//How Can I make this so it ranks both the girl and boy names? I enter \"Jamie\"
ID: 3536742 • Letter: #
Question
//How Can I make this so it ranks both the girl and boy names? I enter "Jamie" and it only gives me the girl rank, but not the male rank.
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
void find_name(string);
int main ()
{
string name;
cout << "Enter a baby name to see how popular it is: ";
cin >> name;
find_name (name);
return 0;
}
void find_name (string name)
{
int rank;
string male, female;
ifstream fin;
bool male_rank = false, female_rank = false;
fin.open ("/Users/carolynmeyers/Desktop/C++/ch. 6 project 17/ch. 6 project 17/babynames2004.txt");
if (fin.fail() && male_rank == false && female_rank == false)
{
cout << "The file can not be opened. ";
exit(1);
}
while (!fin.eof() && male_rank == false && female_rank == false)
{
fin>>rank>>male>>female;
if (name == male)
male_rank=true;
else if (name == female)
female_rank=true;
}
if(male_rank == true && female_rank != true)
{
cout << " "<<name << " is ranked " << rank << " in popularity among boys. ";
cout << " "<<name << " is not ranked among the top 1000 girl names. ";
}
else if (!male_rank== true && female_rank == true)
{
cout << " "<<name << " is not ranked among the top 1000 boys names. ";
cout <<" "<< name << " is ranked " << rank << " in popularity among girls. ";
}
else if (male_rank == true && female_rank == true)
{
cout <<" "<< name << " is ranked " << rank << " in popularity among boys. ";
cout <<" "<< name << " is ranked " << rank << " in popularity among girls. ";
}
else if (male_rank != true && female_rank != true)
{
cout << " "<<name << " is not ranked among the top 1000 boys names. ";
cout <<" "<< name << " is not ranked among the top 1000 girl names. ";
}
fin.close( );
}
Explanation / Answer
there was some logical errer in the program I have corrected it and it worked
the changes I have made
1 while (!fin.eof() && male_rank == false && female_rank == false)
changed to [while (!fin.eof() && male_rank == false || female_rank == false)}
because the loop should run further even one of the male_rank or female_rank is true.
2if (name == male)
male_rank=true;
else if (name == female)
female_rank=true;
changed to if (name == male)
{male_rank=true;
brank = rank;
}
if (name == female)
{female_rank=true;
grank=rank;
}
--------------------------------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
void find_name(string);
int main ()
{
string name;
cout << "Enter a baby name to see how popular it is: ";
cin >> name;
find_name (name);
return 0;
}
void find_name (string name)
{
int rank, brank,grank;
string male, female;
ifstream fin;
bool male_rank = false, female_rank = false;
fin.open ("4.txt");
if (fin.fail() && male_rank == false && female_rank == false)
{
cout << "The file can not be opened. ";
exit(1);
}
while (!fin.eof() && male_rank == false || female_rank == false)
{
fin>>rank>>male>>female;
if (name == male)
{male_rank=true;
brank = rank;
}
if (name == female)
{female_rank=true;
grank=rank;
}
}
if(male_rank == true && female_rank != true)
{
cout << " "<<name << " is ranked " << brank << " in popularity among boys. ";
cout << " "<<name << " is not ranked among the top 1000 girl names. ";
}
else if (!male_rank== true && female_rank == true)
{
cout << " "<<name << " is not ranked among the top 1000 boys names. ";
cout <<" "<< name << " is ranked " << grank << " in popularity among girls. ";
}
else if (male_rank == true && female_rank == true)
{
cout <<" "<< name << " is ranked " << brank << " in popularity among boys. ";
cout <<" "<< name << " is ranked " << grank << " in popularity among girls. ";
}
else if (male_rank != true && female_rank != true)
{
cout << " "<<name << " is not ranked among the top 1000 boys names. ";
cout <<" "<< name << " is not ranked among the top 1000 girl names. ";
}
fin.close( );
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.