0

我对以下部分有疑问。此特定部分应执行以下操作:列出所选讲师教授的所有模块

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

我有一个名为: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

我想知道这是否可以工作?

4

2 回答 2

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声明适用于此。

于 2012-12-12T22:44:13.977 回答
0

由于每一行只包含两个字符串,我不会使用getline(),但这个:

std::string course, teacher;

while (infile) {
    infile >> course >> teacher;
    if (infile) { // strings read correctly
        if (teacher == Lecturere) {
         ...
        }
    }
}
于 2012-12-12T22:54:17.140 回答