我需要更多使用C ++的帮助, 让我们说我不知道我多大了,我想回到“功能2”按ESC。 我想要一些东西,当我按下ESC(不重要的时候)它忽略了“cin”并转到“function2”。 (我知道我不需要所有的图书馆)
#include <iostream>
#include <math.h>
#include <windows.h>
#include <fstream>
#include <cstdlib>
#include <string>
#include <sstream>
# include <conio.h>
using namespace std;
int function2();
float a, c;
int main(){
do {
while (kbhit())
{c = getch();}
if (c==27)
{function2();}
cout << "How old are you?\t" << c << endl;
cin>>a;
} while(c != 27);}
int function2(){
cout<< "!!!END!!!\n";
return 0;
}
答案 0 :(得分:1)
conio.h
是一个已弃用且非标准的C库。要从输入中获取字符,您必须通过cin
(例如cin.get()
),或使用系统相关的功能,在这种情况下,您需要查看提供的库使用适合您平台的编译器。如果可用,请尝试getch()
(另一种非便携式功能)。
At this site您可以找到有关如何实施所需内容的几个示例。
答案 1 :(得分:0)
conio.h不提供任何异步I / O信令的方法。 (更重要的是,conio.h甚至不是C或C ++标准的一部分。我不建议尝试在Mac或Linux上使用它。)您需要实现自己的输入系统(基本上重写{{使用istream::operator >>
在特殊键上分支1}}或可笑的危险gets
。我建议重新考虑你的输入设计,因为即使产生第二个线程来观看getch
(我假设你在Windows上),也不会轻易在另一个线程上中断GetKeyState
。 / p>
答案 2 :(得分:0)
除了conio.h之类的内容之外,原始代码的另一个问题是您正在测试针对整数的浮点数
if (c==27)
鉴于您的输入需要字符,您应该使用char(或整数)类型(忽略可能的UTF-16键盘代码,鉴于您在Windows上,很可能)。
对于与平台无关的代码,您可能需要以下内容:
#include <iostream>
int function2();
int c;
int main(){
do {
cin >> c;
if (c == 27) {
function2();
}
cout << "How old are you?" << endl;
} while (c != 27);
return 0;
}
int function2() {
cout << "!!!END!!!" << endl;
return 0;
}
当然,这种方法存在问题 - 对于正确的事件处理,您需要在WinAPI中使用函数GetKeyState。