在命令行应用程序中输入有问题

时间:2012-01-27 05:18:34

标签: c++ visual-c++ input

#include "ellison.h"

int main(int argc, char *argv[])
{
    if (argc > 1)
    {
        int errorOutput = Execute(argc, argv);
        switch (errorOutput)
        {
            case 0:
                return EXIT_SUCCESS;
                break;
            default:
                cout << "An error occured: " << ParseError(errorOutput);
                return ERROR;
                break;
        }
    }

    cout << "+---------------+  \n";
    cout << "| ellison 0.1.1 |  \n";
    cout << "+---------------+  \n\n";

    int errorOutput = 0;
    string input;

    while (true)
    {
        cout << ">";
        input = "";
        cin >> input;

        if (input == "quit")
        {
            if (errorOutput != 0)
                return ERROR;
            else
                return EXIT_SUCCESS;
        }

        errorOutput = Execute(input);
        switch (errorOutput)
        {
            case 0:
                break;
            default:
                cout << "An error occured: " << ParseError(errorOutput);
                break;
        }
    }
}

此代码编译并运行正常。奇怪的是,如果我用一个或多个空格键入一长串字母,我有两个大于标志,而不是一个。我做了某种错误吗? 我将补充说,这不适用于短输入字符串,并且这是使用Visual-C ++ 2012编译的

1 个答案:

答案 0 :(得分:0)

std :: cin只读到第一个空格。然后,它不会刷新读取缓冲区。 因此,由于你的“while(true)”,当它到达第二个std :: cin时,它会在不等待新输入的情况下读取输入的第二部分。 您应该尝试使用std :: getline(stream&amp; readingBuffer,std :: string&amp; destination)。它将读取整行,如下:

getline(cin, input);

除非你在使用cin后使用cin.ignore(1),否则不要同时使用cin和getline,因为cin会在流中留下'/ n'。如果您在同一个流上使用getline,它将停在'/ n'处,而不是读取您想要阅读的内容。