2013-11-04 29 views
0

我的代码应该将txt文件中的信息传递给字符串向量,然后询问用户输入并将其与字符串向量进行比较以查看是否存在任何匹配。由于某些原因,当我在输入文件中输入一行时,它与字符串向量不匹配。这里是我的代码C++将文件行传递给字符串向量

预先感谢您

/*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 
+0

不匹配甚至尽管我把什么确切的txt文件 –

+0

你可以发布什么样的文件包含了一些简单的线什么? – jrd1

+0

刚从txt发布了几行 –

回答

0

的问题是,在checkMajor()你继续走了过来可能即使在您发现用户输入了文件中存在的答案之后,答案也是如此,因此您的for循环应为:

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

return false; 
+0

它仍然不起作用 –

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; 
} 
+0

出于某种原因,它仍然给我相同的答案 –

+0

我也尝试了最后一行txt文件,它不起作用 –

+0

但是,当我尝试使用最后一行和正确的代码时,它会起作用。哦,这不是问题。当for循环找到它时,它就会停止。 – liaotonglang

相关问题