宝宝名字流行计划

时间:2018-11-07 04:32:37

标签: c++

我必须编写一个程序,允许用户从键盘输入名称。然后,程序应从文件中读取并在男孩和女孩之间搜索匹配的名称。如果找到匹配项,则应输出名称的等级。该程序还应该指出是否不匹配。

这是我的程序:

ifstream fin;
fin.open( "/Users/fashiontekk/Downloads/Assignment 3 Instructions/babyNames2017.dat" );



string nameInput;
string boyName;
string girlName;
int rank= 0;
int boyRank= 0;
int girlRank =0;

cout << " Which name would you like to check? < no space in names please > " << endl;
cin >> nameInput;

fin >> boyName;
fin >> girlName;
rank++;

cout << " After going through an extensive search here is what we found out - " << endl;

if (nameInput == boyName) {
    cout << nameInput << " is ranked " << rank << " in  popularity among boys. " << endl;
    boyRank = rank;
}
if (nameInput == girlName) {
    cout << nameInput << " is ranked " << rank << " in  popularity among girls. " << endl;
    girlRank = rank;
}
if (boyRank < 1 || boyRank > 1000) {
    cout << nameInput << " is not ranked among the top 1000 boys name. " << endl;
}
if (girlRank < 1 || girlRank > 1000) {
    cout << nameInput << " is not ranked among the top 1000 girls name. " << endl;
}

cout << " Hope that is the result you were looking for ... Ending program. " << endl;

fin.close();
return 0;

}

但是,我的输出窗口显示:您想检查哪个名称? <请在名称中没有空格> 程序结束,退出代码:0Liam  经过广泛搜索之后,我们发现了以下内容- 利亚姆(Liam)在女孩中的人气排名第一。 利亚姆(Liam)不在前1000名男孩中。  希望这是您想要的结果。结束程序。

我尝试根据提供的文件输入最受欢迎的男孩名字的利亚姆。我觉得我的编码是正确的,但是我找不到错误。

1 个答案:

答案 0 :(得分:1)

  

这是我在计算机科学专业的第一年,我找不到错误。

好的,我们到过那里。您需要提高调试技能,而将需要它们。特别是,花一些时间学习使用gdb或任何可用的调试器。一个好的调试器可以让您一次一行地浏览程序,观察变量,并通常检查出所有可能出现问题的地方。

因此,让我们看一下代码,以便对其进行调试。发出的消息恰好在程序顶部附近很方便-确实可以缩小可能出错的位置。这是程序的第一部分:

ifstream fin;
fin.open( "babyNames2017.dat" );
if (!fin) {
    cout << " File not processed ";
    return 0;
}

因此,第一行仅声明了输入文件的变量。那里没有太多会出错的地方。下一行打开文件... hmmm ...我不确定这是否是个问题,所以现在让我们在其中钉上一根针,继续前进。下一行if (!fin) {是仅在!fin为true时成功的条件,这意味着fin必须求值为false才能进入此块。并且它显然确实进入了该块,因为这是发出“未处理文件”消息的代码的一部分。因此fin必须为0,对吗?好的,fin怎么可能为0?

我没有C ++ iostreams文档,但是如果fin.open(...)调用失败了,您应该去做一下。考虑到您编写代码的方式,这很像您期望将fin设置为0失败,对吧?那么,该呼叫如何失败?好吧,对于初学者来说,您只需要提供文件名...运行该程序时的工作目录可能会设置为您不希望的文件,因此找不到该文件。否则文件名可能与实际文件名不匹配。请记住,某些文件系统区分大小写,如果您使用的是这样的文件系统,则如果文件仅命名为openbabynames2017.dat或其他任何名称,则BabyNames2017.dat调用将失败与您的文件不完全匹配。