1000 行を含むテキスト ファイルがあります。1行目はこんな感じで「1 Jacob Emily」。2行目から1000行目がそうです。男性名と女性名を検索する関数を呼び出すプログラムを作成する必要があります。
私の出力は次のようになります。
たとえば、ユーザーが「Justice」という名前を入力すると、プログラムは次のように出力する必要があります。
Justice is ranked 406 in popularity among boys.
Justice is ranked 497 in popularity among girls.
ユーザーが「Walter」という名前を入力すると、プログラムは次のように出力します。
Walter is ranked 366 in popularity among boys.
Walter is not ranked among the top 1000 girl names.
名前を検索する関数は次のとおりです。
void name_search (string name)
{
int rank;
string male, female;
ifstream infile;
bool male_found = false, female_found = false;
infile.open ("babynames2004.txt");
if (infile.fail())
{
cout << "The file was corrupt.\n";
}
while (!infile.eof() && male_found == false && female_found == false)
{
infile >> rank >> male >> female;
if (name == male)
male_found=true;
else if (name == female)
female_found=true;
}
if(male_found == true && female_found != true)
{
cout << name << " is ranked " << rank << " in popularity among boys.\n";
cout << name << " is not ranked among the top 1000 girl names.\n";
}
else if (male_found != true && female_found == true)
{
cout << name << " is not ranked among the top 1000 boys names.\n";
cout << name << " is ranked " << rank << " in popularity among girls.\n";
}
else if (male_found == true && female_found == true)
{
cout << name << " is ranked " << rank << " in popularity among boys.\n";
cout << name << " is ranked " << rank << " in popularity among girls.\n";
}
else if (male_found != true && female_found != true)
{
cout << name << " is not ranked among the top 1000 boys names.\n";
cout << name << " is not ranked among the top 1000 girl names.\n";
}
infile.close();
}
これは、その関数が呼び出されたプログラムからの出力です (より適切な文がないため)。
This program allows you to search for the rank of a name from a list of the 1000
2004年の最も人気のある男性と女性の赤ちゃんの名前.
検索したい名前を入力してください: ジェイコブ ジェイコブは男の子の人気ランキング 1 位です。ジェイコブは女の子の名前のトップ1000にランクされていません.
このプログラムをもう一度実行しますか? (y または n) y このプログラムを使用すると、2004 年に最も人気のある男女の赤ちゃんの名前 1000 のリストから名前のランクを検索できます。
検索する名前を入力してください: エミリー エミリーは、男の子の名前のトップ 1000 にランクされていません。エミリーは女の子の人気ランキング1位。
このプログラムをもう一度実行しますか? (y または n) y このプログラムを使用すると、2004 年に最も人気のある男女の赤ちゃんの名前 1000 のリストから名前のランクを検索できます。
検索したい名前を入力してください: ジョーダン ジョーダンは男の子の人気ランキングで 43 位です。ジョーダンは女の子の名前のトップ1000にランクされていません.
このプログラムをもう一度実行しますか? (y または n)
Jordan という名前は、男性の場合は 43 行目、女性の場合は 70 行目にあります。問題は、名前が男性名と女性名の両方に発生したときに出力が間違っている場合のようです。ちなみに、これはプログラミングの授業の課題で、授業はゲームのようなものです。実際にプログラミングを学ぶということではないので、授業で教えられた基本的な構成要素だけに限定しています。
その理由を誰か教えてもらえますか?