好的,这与我的上一个问题相似,但我最终做的事情对于像这样简单的事情来说太复杂了。在按空格键后,我只需要从控制台获取单个字符或数字(我将知道我收到的是哪一个),而不是按回车键。我确信必须有一种方法让终端在空格后读取输入而不是'\ n'。我需要从控制台读取输入,其中后续数据类型将根据第一个输入而变化,我认为读取整行,将其解析为字符串,然后将其中一些解析为整数有点不必要。 / p>
那么这在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的工作方式有很好的了解。
答案 0 :(得分:2)
只需在循环中向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;
}
编辑:添加一些代码以在打到空格之前打印字符,以防你正在寻找。