使用case switch语句加载函数

时间:2012-04-09 16:39:59

标签: c++ visual-studio switch-statement

我正在用C ++编写一个程序,并且我已经能够编译并开始运行,当我选择一个选项时,应该由switch-case语句调用的相应函数isn'叫。我在代码中遗漏了什么吗?

//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;
}

3 个答案:

答案 0 :(得分:5)

您实际上只是 声明 功能而不是 调用

void displaynames();

声明一个函数。

displaynames();

调用一个函数。

答案 1 :(得分: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();

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

答案 2 :(得分:2)

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

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

将(forward)声明(void displaynames();)移动到源文件的顶层(因为在使用它们之后定义函数),然后使用普通函数应用程序语法调用它们({{ 1}})。

从网上somewhere开始:

  

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