2012-04-09 3 views
1

Я пишу программу на C++, и мне удалось ее скомпилировать и начать работать, когда я выбираю опцию, соответствующую функции, которая должна быть вызвана оператор switch-case не вызывается. Я что-то пропустил в своем коде?Загрузить функции с помощью оператора 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

Вы неправильно вызываете функции. Он должен быть

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(); 

Для вызова функции, нужно просто имя функции и параметры функции (которые в данном случае, кажется, не было ни одного. То, как вы в настоящее время это объявление функции, а не вызывали функция.

+0

Кроме того, первоначально используемый синтаксис называется объявлением функции и должен появиться перед тем, как функции будут фактически вызваны, поскольку определения функций приходят после main(), где они используются. –

+0

@Amardeep: Он упоминает в своих комментариях код, что декларации выше основного, он, кажется, просто путается о том, как вызвать функции. – josephthomas

+0

Эти комментарии выглядят как шаблонный. Я уверен, что если бы он знал, каким прототипом он не ошибся, он бы это сделал. –

5

Вы на самом деле просто декларирование функции вместо призывающие их.

void displaynames(); 

Объявление a функция.

displaynames(); 

вызовы функция.

+0

Где мне нужно объявить функцию? Я попробовал объявить их перед основным, и это не скомпилировалось. – user1319815

+0

@ user1319815: * Объявите * их перед 'main()' и * call * их внутри вашего 'switch'-'case'. –

2

В вашем блоке кода (коммутаторе) вы не вызываете никаких функций, а просто объявляете их.

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

Переместите (вперед) декларации (void displaynames();) на верхнем уровне исходного файла (как это вы определяете функции после их использования), а затем вызвать их, используя синтаксис нормальной функции приложения (displaynames();) ,

Из somewhere в сети:

«Заявление для функции также называют прототипом и информирует компилятор о своем намерении определить и использовать его определение для функции. тело (код), связанное с прототипом . "

Смежные вопросы