26

我正在尝试使用头文件在我的输出中保留屏幕<iostream.h>,但我不知道任何与in或任何其他 C++ 库的getch()&clrscr()函数等效的函数。有没有这样的功能?<conio.h><iostream.h>

4

11 回答 11

29

这些conio.h函数是该语言的编译器扩展,而不是 C 或 C++ 的一部分。标准 C++ 中没有直接替代品。

对于 getch(),int ch = std::cin.get();可能是最接近的等价物——但请记住,这将从缓冲的标准输入中读取,而我认为 conio.hgetch会进行无缓冲的读取。

任何实现clrscr()都将非常依赖于平台——并不是所有的屏幕或终端都有清除的概念,而且那些确实有完全不同的方式来访问该功能。

如果您需要将终端视为一组字符流以外的东西,那么最好的选择可能是寻找一个库,它可以隐藏底层终端、屏幕或控制台的详细信息。如果您使用的是 UNIXish 系统,请查看 curses 或 ncurses 库;我不知道对其他操作系统有什么建议。

于 2009-09-04T05:56:25.307 回答
9

getch() 和 clrscr() 将与 C++ 一起使用。包括 conio.h

但是,如果您不能(出于某种原因)包含 conio.h,

cin>>dummy_var 显示消息要求用户按 Enter 怎么样?

于 2009-09-04T05:47:20.053 回答
7

只需使用 cin.get();

于 2010-12-16T02:16:32.383 回答
4

只需使用这两个功能:

fflush(stdin);
getchar();

Visual Studio 和 Dev C++ 将其包含在其iostream头文件中,因此无需包含额外的头文件。

于 2012-06-18T18:33:33.487 回答
3

这是我通常使用的:

#include<iostream>
...
std::getchar();
于 2013-04-11T22:54:03.603 回答
2

迟到的答案,您可以使用std::cin.get(),这应该适用于大多数编译器。如果这不起作用,请尝试添加另一个。

int main () {

    // ...

    std::cin.get();
    std::cin.get();
    return 0x00;
}

Usingsystem("PAUSE")只能在 Windows 上使用,是一种不好的编程习惯。这样做的原因是它实际上暂停冻结了您的程序,而不是仅仅等待输入。IE。按键退出。

于 2013-04-11T21:26:08.840 回答
1

我知道这是一个老问题,但我还是要回答,因为人们可能正在寻找类似问题的答案。

conio.h是一个(古老的)Windows 和 MS-DOS/PC-DOS C 库,过去和现在仍然用于 Windows/DOS 环境中非常基本的裸机键盘输入和处理。

两者getch()clrscr()都是此标头的非标准添加,对于标准 C 函数应尽可能避免。在 C 和 C ++ 中,getch()通常可以用scanf(), , 代替。至于,你能得到的最接近的是:fread()std::cinstd::cin.getclrscr()

for(int i = 0; i < 100; i++)
{
    printf("\n");
}

或者:

ncurses.h在 *nix 环境中也有。这是有关此信息的链接

于 2016-01-19T01:12:40.203 回答
1

conio.h 中的特定于平台的函数getch()有两个特殊功能:

  • 没有字符的回声
  • 无缓冲读取字符。

回显由 C/C++ 环境之外的终端完成。它只能通过操纵终端来控制。此外,几乎不可能使用 iostream.h 标头获得无缓冲的 I/O。

getch()因此,单独使用 iostream.h是不可能的。

(周围有很多getch()实现,例如使用 termios.h 禁用回显。)

于 2018-10-24T16:17:02.260 回答
1

因为clrscr() 我通常使用

system("cls");       //Windows
system("clear");     // Linux

对于getch()我同意的功能 @iKlsR,只需使用 cin.get() 2 次。

{   ...
    std::cin.get();
    std::cin.get();
}

如果您希望暂停系统片刻或特定时间间隔,请使用:

system("sleep 5s"); //for linux

基本上该函数在终端中system("x")运行命令。x因此,您可以通过使用不同的功能代替x. (具体使用与您的发行版或操作系统相关的命令)

于 2021-01-09T11:18:52.357 回答
-6

您可以使用 system("pause"),它会产生“按任意键继续”消息。但它仅适用于 windows 环境。我认为所有的“系统”命令都是dos命令。如果我错了,请纠正我

于 2012-04-26T05:01:46.583 回答
-24

如果你在 Windows 上工作,你可以使用系统(“暂停”),这会给你“按任意键继续”消息。

于 2009-09-04T10:01:03.677 回答