getch已被弃用

时间:2009-05-02 14:53:35

标签: c deprecated

在某个时间我在大学里做了一些C和C ++,但我并没有太多关注C ++。现在我想关注C ++但是当我使用getch()函数时,我会从下面收到警告。

  

警告C4996:'getch':不推荐使用此项目的POSIX名称。而是使用符合ISO C ++的名称:_getch。有关详细信息,请参阅在线帮助。

现在,我正在使用VS 2005 express,我不知道如何处理此警告。在getch()出现错误消息或其他需要按键命中的内容后,我需要使用printf()

你能帮帮我吗?

6 个答案:

答案 0 :(得分:23)

Microsoft决定在不使用下划线的情况下标记名称,因为这些名称是为程序员选择保留的。如果特定于实现的扩展要遵守C或C ++标准,则应使用以全局命名空间中的下划线开头的名称 - 或者它们应将自身标记为符合标准的组合环境,例如POSIX / ANSI / ISO C,其中然后,函数对应于其中一个标准。

阅读this answer about getcwd(),以获得P. J. Plauger的解释,当然,他非常了解事情。

如果您只想等待用户输入的某些键,则没有理由不使用getchar。但有时使用_getch和朋友对用户来说更实用,更方便。但是,这些不是由C或C ++标准指定的,因此会限制程序的可移植性。记住这一点。

答案 1 :(得分:9)

如果您使用的是C ++,为什么printfgetch?请考虑改为使用coutcin.get

答案 2 :(得分:4)

使用_getch()而不是getch()

答案 3 :(得分:3)

你为什么需要这个?如果您需要捕获单个字符,为什么不使用getchar()

答案 4 :(得分:3)

如错误所示,不推荐使用名称getch()(因为这是Microsoft特定的扩展名),建议使用_getch()。我不确定POSIX在哪里进入它; POSIX没有定义getch(),而是包含getchar()指定的ISO C standard(第298页,草稿链接到因为最终标准不是免费的)。解决方案是按照建议执行并使用_getch(),或使用标准C getchar()

答案 5 :(得分:0)

您可以使用“ std :: getc(stdin);”。它的工作原理像“残培();”在我的计划。 我认为这是'getch()'的不错选择 如果我错了,请告诉我。

#include <cstdio>

switch (std::getc(stdin)) {
    case 'a':   cout << 'a' << endl ; break;
    case 'b':   cout << 'b' << endl ; break;
    default:    cout << '$' << endl; break;
}

它输出 'A',如果你输入 'A' 上的控制台。