好的,这与我的上一个问题类似,但是最终我做的事情太简单了。我只需要在按空格键而不是回车键后从控制台获得一个字符或数字(我将知道要接收哪个字符或数字)即可。我确定必须有一种方法可以让终端读取输入后的空格而不是'\ n'。我需要从控制台读取输入,随后的数据类型将根据第一个输入的内容而有所不同,我认为读取整行,将其解析为字符串,然后将其中一些解析为int是不必要的。

那么,这在C++中实际上是不可能的吗?还是我还没有找到呢?

编辑:

对于任何遇到此问题的人,我都会发布我的解决方案,因为我现在感觉像个白痴。

#include <iostream>

using namespace std;

int main() {

    int command = 0, x = 0, y = 0, z = 0;
    char c;

    do {
        cin >> command;
        switch(command) {
            case 1:
                cin >> c >> x;
                cout << c << " " << x << endl;
                break;
            case 2:
                cin >> x >> y >> z;
                    cout << x << " " << y << " " << z << endl;
                    break;
        }
    } while (command); //Exits when command = 0;

    return 0;

}

switch语句内的以下cin将从与第一个cin相同的缓冲区读取,因此无论如何都无需事先读取命令。正如您所看到的,这对于第一个cin之后的不同类型和数量的输入都适用,因此不需要使用任何其他解决方案。

只是将其发布给可能有相同问题的其他人,并且对cin的工作方式没有很好的了解。

最佳答案

只需在循环中发出对getchar()(或getch())的多次调用,并在每次迭代时检查输入。

像这样(未经测试但应该可以工作):

int loop = 1
int spacehit = 0
char last_c = 0;
while(loop)
{
    char c = getchar();
    switch(c)
    {
        case ' ':
            spacehit = 1;
            printf("hit '%c' before 'space'!\n", last_c);
            break;
        case 'x':
            printf("hit 'x' after 'space'!\n");
            spacehit = 0;
            break;
        case 27: // escape
            loop = 0;
            break;
        default:
            // do something, e.g. append the key in c to a string
            break;
    }
    last_c = c;
}

编辑:添加了一些代码,可以在击中空格之前打印出字符,以防万一,这正是您所需要的。

10-07 13:46
查看更多