我曾经在大学学习过C和C++,但我没有太关注C++。现在我希望关注一下C++,但当我使用 getch()
函数时,我收到了下面的警告:
警告 C4996: 'getch': 此项的 POSIX 名称已被弃用。请改用符合 ISO C++ 标准的名称: _getch。有关详细信息,请参阅在线帮助。
现在,我正在使用VS 2005 Express,我不知道该如何处理这个警告。我需要在打印错误消息或其他需要按键的情况下使用 getch()
。
你能帮我解决这个问题吗?
我曾经在大学学习过C和C++,但我没有太关注C++。现在我希望关注一下C++,但当我使用 getch()
函数时,我收到了下面的警告:
警告 C4996: 'getch': 此项的 POSIX 名称已被弃用。请改用符合 ISO C++ 标准的名称: _getch。有关详细信息,请参阅在线帮助。
现在,我正在使用VS 2005 Express,我不知道该如何处理这个警告。我需要在打印错误消息或其他需要按键的情况下使用 getch()
。
你能帮我解决这个问题吗?
微软决定将不带下划线的名称标记为过时,因为这些名称保留供程序员选择。如果实现特定扩展想要遵守C或C ++标准,则应在全局命名空间中使用以下划线开头的名称; 或者他们应标记自己为符合组合标准的环境,例如POSIX / ANSI / ISO C,在这种情况下,此函数相当于其中一个标准。
还可以阅读有关getcwd()的此答案,由 P.J. Plauger 提供解释,他当然非常了解这方面的知识。
如果您只是对等待用户键入的某些按键感兴趣,则使用getchar
没有任何理由不可行。但有时对用户来说,使用_getch
和类似函数更实用和方便。但是,这些函数未在C或C++标准中指定,因此会限制程序的可移植性。请记住这一点。
如果你喜欢使用C++,为什么不考虑使用cout
和cin.get
,而选择使用printf
和getch
呢?这样能使代码更易读懂。
使用 _getch() 代替 getch()
getch
与getchar
关系不大。相反,它是一个conio(我认为也包括curses)接口,其目的是从键盘交互式地读取单个字符而不进行缓冲/延迟。 - R.. GitHub STOP HELPING ICEopen
或mkdir
这样的类POSIX函数,以获得下划线版本。可能他们只是不想为少数例外创建单独的警告消息。 - Harry Johnston你为什么需要这个?如果你只需要捕获一个单独的字符,为什么不使用getchar()
呢?
你可以使用 "std::getc(stdin);"。它的作用类似于我的程序中的 'getch();'。 我认为这是 'getch()' 的一个很好的替代品。 如果我错了,请告诉我。
#include <cstdio>
switch (std::getc(stdin)) {
case 'a': cout << 'a' << endl ; break;
case 'b': cout << 'b' << endl ; break;
default: cout << '$' << endl; break;
}