0

我的代码应该将 txt 文件中的信息传递给字符串向量,然后要求用户输入并将其与字符串向量进行比较以查看是否有任何匹配项。出于某种原因,当我在输入文件上输入一行时,它与字符串向量不匹配。这是我的代码

先感谢您

/*You are going to keep track of user majors using a vector.

First read in the file:

http://www.freerschool.com/pluginfile.php/9623/mod_resource/content/1/MajorsFull.txt

Enter each major into a vector of strings.

Ask the user to keep entering in possible majors until they enter "quit" or "Quit".

Create a function:

bool checkMajor(string userInput)

that takes in the major from the user (as a string) and returns true if the major is in the list of possible majors and a false if the major is not there.

Display to the screen whether or not the major they entered is available in the file of majors.

Hint:

for(string line; getline( input, line ); )
{
 //Read in the line into the vector!
}*/
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

bool checkMajor(string userInput, vector<string>majorsFull){
    bool answer = true;
    string major;
    for(int i = 0; i < majorsFull.size(); i++){
        if (majorsFull[i] == userInput){
                answer = true;
                break;
        }
        else answer = false;
    }
    return answer;
}

int main()
{
    ifstream infile;
    infile.open ("MajorsFull.txt");

    vector<string> majorsFull;
    string userInput;

    for (string majors; getline(infile, majors);){
        majorsFull.push_back(majors);
    }

    do

    {

    getline(cin, userInput);

    if (userInput != "Quit" && userInput != "quit"){


    if (checkMajor(userInput, majorsFull))
    {
            cout << "Yes" << endl;
    }

    else cout << "No" << endl;

    }

    else break;

    }


    while (userInput != "Quit" && userInput != "quit");

    infile.close();

    return 0;
}

以下是文件包含的几行内容:

Accounting
Accounting
Actuarial Science
Advertising
Advertising
African American and African Studies
African American and African Studies
Agribusiness Management
"Agricultural, Food and Resource Economics"
"Agricultural, Food and Resource Economics"
Animal Science
Animal Science
Animal Science
Animal Science-Environmental Toxicology
Anthropology
Anthropology
Applied Engineering Sciences
Applied Mathematics
Applied Mathematics
Applied Spanish Linguistics
Applied Statistics
Arabic
Art Education
Art History and Visual Culture
Arts and Humanities
Astrophysics
Astrophysics and Astronomy
Astrophysics and Astronomy
4

2 回答 2

0

您的问题出在下面的函数中,我已修复它。在您的代码中,如果最后一行不匹配,它总是返回 false。

bool checkMajor(string userInput, vector<string>majorsFull){
    bool answer;
    string major;
    for(int i = 0; i < majorsFull.size(); i++){
        if (majorsFull[i] == userInput) return answer = true;
        //else answer = false;
    }
    return false;
}
于 2013-11-04T05:32:55.500 回答
0

问题是,checkMajor()即使您发现用户输入了文件中存在的答案,您仍会继续检查可能的答案,因此您的for循环应该是:

for(int i = 0; i < majorsFull.size(); i++){
    if (majorsFull[i] == userInput) return true;
}

return false;
于 2013-11-04T05:21:38.393 回答