我正在用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;
}
答案 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开始:
“函数的声明也称为原型 通知编译器您定义和使用它的意图。一个 函数的定义是与之关联的主体(代码) 原型“。