Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用开关C+从用户处获取输入+;_C++_Switch Statement - Fatal编程技术网

C++ 使用开关C+从用户处获取输入+;

C++ 使用开关C+从用户处获取输入+;,c++,switch-statement,C++,Switch Statement,我有一个系统,用户可以输入任意多的输入,并进行一些计算 以下是完成此任务的代码: int main() { char op = 's'; float time=0, fuel_rate=0, start=0, end=0, pace=0; while(op != 'x'){ cout << "Please select: " << endl; cout << "1 ---> A" <<

我有一个系统,用户可以输入任意多的输入,并进行一些计算

以下是完成此任务的代码:

int main() {
    char op = 's';
    float time=0, fuel_rate=0, start=0, end=0, pace=0;


    while(op != 'x'){
        cout << "Please select: " << endl;
        cout << "1 ---> A" << endl;
        cout << "2 ---> B" << endl;
        cout << "3 ---> Calculate" << endl;
        cout << "x ---> Exit" << endl;

        op = std::getchar();

        //remove the rest of the line from input stream
        int temp;
        while ( (temp = std::getchar()) != '\n' && temp != EOF );

        switch(op){
        case '1':
            cout << "Enter time: ";
            cin >> time;
            cout << "Enter fuel rate: ";
            cin >> fuel_rate;
            break;
        case '2':
            cout << "Enter start: ";
            cin >> start;
            cout << "Enter end: ";
            cin >> end;
            cout << "Enter pace: ";
            cin >> pace;
            cout << "Enter fuel rate: ";
            cin >> fuel_rate;
            break;
        case '3':
            cout << "Total value";
            break;
        case 'x':
            return 0;
        default:
            continue;
        }
    }
    return 0;
}
第一个用户进入操作1,系统要求提供时间和燃油率。当用户进入操作2时,系统不要求开始、结束或配速


关于如何解决这个问题,有什么想法吗?

我相当肯定
std::getchar()
是您大多数问题的原因。如果我更改您的代码以使用:

cin >> op;
switch (op) { 
//...
而不是

op = std::getchar();

//remove the rest of the line from input stream
int temp;
while ( (temp = std::getchar()) != '\n' && temp != EOF );

switch(op){
//...
    op = std::getchar();

程序运行得很好。

您混合使用了
std::cin
stdin
。你应该坚持使用其中一种方法。而不是

op = std::getchar();

//remove the rest of the line from input stream
int temp;
while ( (temp = std::getchar()) != '\n' && temp != EOF );

switch(op){
//...
    op = std::getchar();
使用

您应该移动这些行:

    int temp;
    while ( (temp = std::getchar()) != '\n' && temp != EOF );
开关
块结束后,确保使用
temp=cin.get()

未使用的换行符保留在输入流中,因为您正在使用
操作符>>()
读取数据,例如:

    cin >> fuel_rate;
默认情况下,您的交换机会清楚地显示发生了什么:

// ...
default:
  cout << "unexpected: " << int(op) << endl;
  continue;
// ...
或者使用格式化输入(它自己进行跳过):

尽管您还需要注意文件结束条件,但您当前的代码并没有像上面运行的示例中所看到的那样做到这一点

cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cin >> op;