c ++是函数调用的while循环问题

时间:2014-11-21 05:45:06

标签: c++

我的下面的代码有一个问题,它有效,但是当我运行它时,它会显示

  

'代码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();
}

我很确定我在这里遗漏了一些东西。

1 个答案:

答案 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中使用,那么为什么它不被声明为函数的局部变量?