我的下面的代码有一个问题,它有效,但是当我运行它时,它会显示
'代码0:代码1:'
我期待
'代码0:'然后等待你的第一个输入然后接下来的是#1;代码1:'
这是我的代码:
using namespace std;
//function Definitions
int fStore();
void fPrint();
//global variable definitions
map <int, string> codeDB; //map for inputStrings
string inputData; //store long string here
string status("EXIT");
int lineNum;
int main(){
int choice;
//menu here
cin >> choice;
switch(choice){
case 1: fStore(); break;
case 2: fPrint(); break;
case 3: cout << "You chose third" << endl; break;
default: cout << "Invalid Input" << endl;
}
}
int fStore(){
cout << "\n----------Input your codes here-----------\n" << endl;
while (inputData.compare(status)){
cout << "Code " << lineNum << ": ";
getline(cin, inputData);
codeDB.insert(pair<int, string>(lineNum, inputData));
lineNum++;
}
inputData = "";
main();
}
我很确定我在这里遗漏了一些东西。
答案 0 :(得分:0)
问题是在使用choice
在变量operator >>
中输入数据后,输入缓冲区包含与预先设置的键ENTER对应的新行字符。接下来getline
读取一个空字符串,直到遇到这个新行字符。您应该使用成员函数ignore从缓冲区中删除此字符。例如
#include <limits>
//...
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
考虑到在C ++中可能不会递归调用main。所以这个函数定义 无效
int fStore(){
cout << "\n----------Input your codes here-----------\n" << endl;
while (inputData.compare(status)){
cout << "Code " << lineNum << ": ";
getline(cin, inputData);
codeDB.insert(pair<int, string>(lineNum, inputData));
lineNum++;
}
inputData = "";
main();
}
此外,该函数应该有一个返回语句,其表达式转换为int类型,因为该函数的返回类型为int。
使用全局变量也是一个坏主意。例如,变量inputData
仅在函数fStore
中使用,那么为什么它不被声明为函数的局部变量?