C ++将输入与文本文件中的数据匹配,如果匹配则仅显示该数据

时间:2012-12-12 22:35:39

标签: c++ visual-studio-2010 visual-c++

我对以下部分有疑问。 这个特殊部分应该做到以下几点: 列出所选讲师教授的所有模块

我正在努力将来自用户的输入与文本文件中的数据进行匹配,并且只显示所选讲师教授的模块列表。

我有一个名为:Taught.txt的文本文件,文本文件的内容如下:

IS1S01  AW 
IS1S02  MG 
SE2S552 BM 
CS2S504 BM 
CS3S08  SL 
MS3S28  DJ
CS1S03  EM 
BE1S01  SJ 
BE2S01  SH 
SS1S02  AB 
SE1S02  AW

以下部分是我到目前为止所做的代码。

void listofmodulebylecturer()
{
    std::string Lecturer;
    std::string Module;

    // Display message asking for the user input
    std::cout << "\nList all modules taught by selected lecturers." << std::endl;
    std::cout << "Enter your preferred lecturers." << std::endl;

    // Read in from the user input
    std::cin >> Lecturer;

    // Read from text file and Display list of modules taught by the selected lecturer

    std::ifstream infile;

    // infile.open("Lecturer");
    infile.open("Taught.txt");

    if (!infile)
    {
        std::cout << "List is empty" << std::endl;
    }
    else
    {
        std::cout << "\nList of Modules:" << std::endl;

        while(!infile.eof())
        {
            getline(infile,Module);

            std::cout << Module << std::endl;
        }

        std::cout << "End of list\n" << std::endl;
    }

    infile.close();         // close the text file  
    system ("PAUSE");
}

我在考虑使用

if (........)
{
}
else

我想知道这是否可行?

2 个答案:

答案 0 :(得分:1)

使用infile.eof()无法在您想要使用它的目的下可靠运行。如果第二个单词符合预期,您应该阅读两个单词并打印第一个单词。阅读这些文字会是这样的:

for (std::string module, teacher; infile >> module >> teacher; ) {
    // check if the teacher is the correct one and, if so, print the module
}

...而且,是的,if声明适用于此。

答案 1 :(得分:0)

由于每行只包含两个字符串,因此我不会使用getline(),而是:

std::string course, teacher;

while (infile) {
    infile >> course >> teacher;
    if (infile) { // strings read correctly
        if (teacher == Lecturere) {
         ...
        }
    }
}