1

我正在用 C++ 编写一个程序,并且我已经能够让它编译并开始运行,但是当我选择一个选项时,应该由 switch-case 语句调用的对应函数不会被调用。我的代码中是否缺少某些内容?

//The following program framework is given.
//Add the programming logic to complete the assignment.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
//function prototypes should be placed here
//Main must be the first function in the program. Write other functions after it.
int main()
{
char cInput;
string strFileName;
vector<string> vecStudent;
cout<<"Please enter the data file name (with location): ";
cin >> strFileName;
//call a function to read the content of the input file into
//the vector vecStudent
while (true)
{
cout<<"----------------------------------------"<<endl;
cout<<" Student Record - Main Menu "<<endl;
cout<<"----------------------------------------"<<endl;
cout<<" Enter 1 to display ALL students"<<endl;
cout<<" Enter 2 to add a student name"<<endl;
cout<<" Enter 3 to delete a student name"<<endl;
cout<<" Enter 4 to SAVE and quit the program"<<endl;
cout<<"----------------------------------------"<<endl;
cout<<"Enter menu option: ";
cin>>cInput;
switch (cInput)
{
case '1':
//call function display names
   void displaynames();
break;
case '2':
   void addname();
//call a function add name
break;
case '3':
    void deletename();
//call function delete names
break;
case '4':
   void  saveandquit();
//call function save and quit
return 0;

if( cInput != 1,2,3,4)
cout<<"invalid input"<<endl;
break;
}
}
return 0;
}

int displaynames()
{
    ifstream inFile;
    ofstream outFile;
    string strFileName;
    string strFName,strLName;
    vector<string> vecStudent;
    char line[80];

    // open input file
    inFile.open(strFileName.c_str());
    if (inFile.fail())
    {
        cout << " Input file error!" << endl;
            return -1;
    }
    while (inFile>>strFName>>strLName)
        vecStudent.push_back(strFName+ " "+strLName);
    inFile.close();

    //display the content of the vector
    for(int i =0; i< vecStudent.size();i++)
        cout<<vecStudent[i]<<endl;
return 0;
}

int addname()
{
    ifstream inFile;
    ofstream outFile;
    string strFileName;
    string strFName,strLName;
    vector<string> vecStudent;
    char line[80];
    //add a new name
    cout << endl<< " Enter a new name( First and Last Name):";
    cin>>strFName>>strLName;
    vecStudent.push_back(strFName+ " "+strLName);

    // open output file for writing
    outFile.open(strFileName.c_str());
    if ( outFile.fail())
    {
        cout<<" Output file error! Student was not added"<<endl;
        return -1;
    }

    //display the content of the vector
    for(int i=0; i<vecStudent.size(); i++)
        cout<< vecStudent[i]<<endl;

    for(int i=0; i<vecStudent.size();i++)
        outFile<<vecStudent[i]<<endl;
    outFile.close();
return 0;
}


int saveandquit()
{
    ifstream inFile;
    ofstream outFile;
    string strFileName;
    string strFName,strLName;
    vector<string> vecStudent;
    int i=0;
    char line[80];
    //     open output file for writing
    outFile.open(strFileName.c_str());
    if ( outFile.fail())
    {
        cout<<" Output file error!"<<endl;
        return -1;
    }

    //display the content of the vector
    for(int i=0; i<vecStudent.size(); i++)
        cout<< vecStudent[i]<<endl;

    for(int i=0; i<vecStudent.size();i++)
        outFile<<vecStudent[i]<<endl;
    outFile.close();
    cout << " file saved. enter -1 to quit";
    cin>> i;
    if( i=-1)


    return 0;
}



 int deletename()
{
    ifstream inFile;
    ofstream outFile;
    string strFileName;
    string strFName,strLName;
    vector<string> vecStudent;
    int namepos = 0;
    char line[80];

    inFile.open(strFileName.c_str());
    if (inFile.fail())
        cout <<"Input file error!"<<endl;

    //read the names from the file into the vector
    while (inFile >> strFName >> strLName)
        vecStudent.push_back(strFName+" "+strLName);
    inFile.close();

    cout <<"\nEnter the name to be deleted (First name and Last name): ";
    cin >>strFName >>strLName;

    int i=0, pos=-1;
    int size = vecStudent.size();
    bool found=false;
    // use a linear search to find the name in the vecotor of names

    while (i < size && !found)
    {
        if (vecStudent [i] == strFName+" "+strLName)
        {
            found = true;

    cout <<"\nthat name is in the "<<(pos + 1) <<" position in the list\n";
    cout <<"Please enter the position in list\n";
    cin>> pos;
    // use an iterator to delete name from vecStudent. vector.erase requires an iterator. used a while loop to find the name and make sure it was in the
    // vector of strings. then the loop displays the position in the vector that the string is. the program asks the user to enter the number position of the name
    // from there the user enters the name and the program uses a for loop to find the position and the built in vector.erase to remove the name from the list.
    for(int i=0; i ==pos; i++)
    {
        if(i == pos)
        {
            vecStudent.erase (vecStudent.begin());
        }
    }
    }
    }

    return 0;
}
4

3 回答 3

5

您实际上只是在声明函数而不是调用它们。

void displaynames();

声明一个函数。

displaynames();

调用一个函数。

于 2012-04-09T16:45:00.567 回答
4

你调用的函数是错误的。它应该是

case '1':
//call function display names
   displaynames();
break;
case '2':
   addname();
//call a function add name
break;
case '3':
    deletename();
//call function delete names
break;
case '4':
   saveandquit();

要调用一个函数,你只需要函数名和函数参数(在这种情况下,似乎没有。你目前拥有它的方式是声明一个函数而不是调用一个函数。

于 2012-04-09T16:42:40.947 回答
2

在您的代码块(开关)中,您没有调用任何函数,而只是声明它们。

...
case '1':
//call function display names
   void displaynames();
break;
...

将(前向)声明 ( void displaynames();) 移动到源文件的顶层(因为您在使用它们之后定义函数),然后使用正常的函数应用程序语法 ( displaynames();) 调用它们。

从网上的某个地方:

“函数的声明也称为原型,它通知编译器您定义和使用它的意图。函数的定义是与原型相关联的主体(代码)。”

于 2012-04-09T16:46:06.620 回答