如果我想使用非标准的函数,并且是由于编译器特定的API导致的,我应该怎么做? 我一直使用非常老的Turbo C++ 3编译器。

如果我想使用非标准的函数,并且是由于编译器特定的API导致的,我应该怎么做? 我一直使用非常老的Turbo C++ 3编译器。,c++,C++,在使用这个编译器的过程中,我已经习惯了像getch(),getche()这样的函数,最重要的是clrsc() 现在我已经开始使用Visual C++ 2010 Express了。这引起了很多问题,因为这些函数中的大多数(我现在发现)是非标准的,在VisualC++中是不可用的。 我现在该怎么办?如果可能的话,总是尽量避免他们,或者尝试他们的替代方案: for getch() --- cin.get() clrscr -- system("cls") // try avoiding the

在使用这个编译器的过程中,我已经习惯了像
getch()
getche()
这样的函数,最重要的是
clrsc()

现在我已经开始使用Visual C++ 2010 Express了。这引起了很多问题,因为这些函数中的大多数(我现在发现)是非标准的,在VisualC++中是不可用的。
我现在该怎么办?

如果可能的话,总是尽量避免他们,或者尝试他们的替代方案:

for getch() --- cin.get()
clrscr -- system("cls")    // try avoiding the system commands. check : [System][1]

对于任何其他人,你都可以搜索它们。

真正的问题是你在全球范围内试图做什么。
getch
clrsc
从来都不是便携式的。如果你想 要在控制台窗口中创建遮罩或菜单,您应该 进入
诅咒
ncurses
:它们为 这样的事情。如果只是传呼,你可能会逃走 通过简单地输出大量的
'\n'
(对于
clrsc
), 和
std::cin.get()
用于
getch
。(但要注意,这只会 用户输入新行后返回,并且仅读取 行的一个字符,将其余字符留在缓冲区中。它 绝对不是直接替代
getch
。事实上,
std::getline
std::cin::ignore
可能是更好的选择。)

编辑: 添加更多可能性:

首先,正如约阿希姆·皮莱博格(Joachim Pileborg)在评论中所说,如果 可移植性是一个问题,可能存在特定于平台的问题 用于您尝试执行的大部分操作的函数。如果你是 关注的是Windows(而且可能是,因为
系统(
“cls”)
getch()
在其他地方不起作用),然后是他的评论 这可能是一个充分的答案

其次,对于许多控制台(包括xterm和a控制台) Windows下的窗口),转义序列
“\x1b”“2J”
应 清除屏幕。(请注意,您必须将其作为两个输入。) 单独的字符串文本,否则将是 解释为两个字符,第一个带有不可能的十六进制 值0x1b2。)不要忘记 然而,重定向和刷新

最后,如果你在做一些非琐碎的事情,你应该看看 对于
诅咒
(或
ncurses
),它们是相同的东西,但具有 不同的实现)。要投入更多的精力 操作(您需要显式初始化等),但它有 一个
getch
函数,它完全满足您的需要,而且 具有明确定位游标的功能,等等 也可能使您的代码更简单。(原来的
诅咒
是 为支持UCB的原始
vi
编辑器而开发。任何 不在自己的窗口中开发类似编辑器的任务 从中受益匪浅。)

各位,我找到了一个可以在任何地方使用的最佳解决方案

我只是在谷歌上搜索了clrsc()和gotoxy()的定义,创建了一个头文件,并将这些定义添加到其中。因此,我可以包含此文件并执行我之前所做的所有操作

但是,我也有一个疑问

定义中有windows.h。假设我编译该文件并生成一个exe文件。那么我能在linux机器上运行它吗


根据我的说法,答案必须是肯定的。但请告诉我我是否错了,并告诉我为什么错。

回到2013年,学习新技术。这取决于你使用这些功能的目的。最简单的答案是“不要再使用它们了”。只要停止使用非标准API,除非你有非常好的理由这样做(即使这样,也不要)。自己实现它们并将其打包为库。阅读更多关于本机WIN32的信息。先生,cin.get()的行为是否与getch()的行为完全匹配?getch()获取char并返回它。与
cin.get()相同。
take char并返回。但可能您从未将其分配给char变量,所以您不确定。试试char
x=getch()或char x=cin.get()
Sir,我也有旧的头文件。有什么方法可以将它们集成到Visual C++ 2010中吗?总是有办法的。但请阅读第一行:“避开它们”。我从来没有想过我需要它们。事实上,我只是尝试了一下,cin.get()要求按enter键。这正是我想要避免的。有没有什么方法可以在按下charachter时直接取下它?