C ++:在空格字符后获取字符或回车

Posted

技术标签:

【中文标题】C ++:在空格字符后获取字符或回车【英文标题】:C++: Get char after space character instead or return carriage 【发布时间】:2011-02-28 23:16:28 【问题描述】:

好的,这与我的上一个问题相似,但我最终做的事情对于像这样简单的事情来说太复杂了。按空格键后,我只需要从控制台获取一个字符或数字(我会知道我收到了哪些),而不是按回车键。我确信必须有一种方法可以让终端在空格而不是'\ n'之后读取输入。我需要从控制台读取输入,其中后续数据类型将根据第一个输入的不同而有所不同,我认为读取整行,将其解析为字符串,然后将其中一些解析为整数有点不必要。

那么这在 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 工作方式不太了解的其他人发布此内容。

【问题讨论】:

不确定我是否理解您的需求,但是 std::cin >> anInt >> aChar >> aFloat 呢?三个变量的输入确实出现在同一行,每个变量之间用空格隔开。 是的,这本质上是问题所在,但是我必须根据第一个输入的内容来改变值的类型,而且我没有意识到我可以从同一行读取这些输入在我完成输入后无需注册第一个字符。从本质上讲,我发现在我按下回车键后,我可以从已经输入的第一行中读取不同的输入。 【参考方案1】:

只需在循环中多次调用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;

编辑:添加了一些代码以在点击空格之前打印字符,以防万一这是您要查找的内容。

【讨论】:

以上是关于C ++:在空格字符后获取字符或回车的主要内容,如果未能解决你的问题,请参考以下文章

如何在空格后获取子字符串?

在C#中的某个特定字符后获取值

使用getchar()获取字符串

C ++如何在获取其索引位置后获取子字符串

如何在sql db2中的空格后获取字符串的最后一个字符

如何在第 n 次出现管道“|”后获取字符或字符串ORACLE 中使用 REGULAR_EXPRESSION 的符号?