菜鸟求助 关于vs2017 _getch() 的问题

兰-图 2018-09-02 10:33:03

为什么我在vs2017上按一个键,第二个_getch()会自动变成\0,而我换了2013 或者其他人电脑上的2017 没有这种问题,是哪个地方的设置问题吗? 我该如何解决?
...全文
1305 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hunaen13985499550 2019-01-10
  • 打赏
  • 举报
回复
getch()函数不安全,在visual 2017里改成了_getch();另要加入头文件conio.h,示例如下:
#include <stdio.h>
#include <conio.h>

int main()
{
printf("大家好");
_getch();
return 0;
}

这样就可以正常运行了
程序员杰森 2018-12-21
  • 打赏
  • 举报
回复
引用 4 楼 www_adintr_com 的回复:
换成 _getwch 吧
估计是 VC2017 Bug 了, 读了一个 wchar 来放到缓冲区中又没做处理.
大佬,这个_getwch()与getch()有什么区别呢?
程序员杰森 2018-12-21
  • 打赏
  • 举报
回复
引用 7 楼 sg2709ch 的回复:
换成getwch应该能解决
大佬,这是为什么呢?
兰-图 2018-09-04
  • 打赏
  • 举报
回复
引用 4 楼 adlay 的回复:
换成 _getwch 吧
估计是 VC2017 Bug 了, 读了一个 wchar 来放到缓冲区中又没做处理.


谢谢 ,使用getwch() 确实解决了我的问题
兰-图 2018-09-04
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
#include <conio.h>
#include <windows.h>
int main() {
int k;

while (1) {
if (kbhit()) {
k=getch();
if (0==k || 0xE0==k) k=k<<8|getch();
if (27==k) break;//按Esc键退出
cprintf("\r\n%04X\r\n",k);
}
Sleep(200);
cprintf(".");
}
return 0;
}



每次按键之后只会打印出一个点啊
sg2709ch 2018-09-04
  • 打赏
  • 举报
回复
换成getwch应该能解决
www_adintr_com 2018-09-03
  • 打赏
  • 举报
回复
换成 _getwch 吧
估计是 VC2017 Bug 了, 读了一个 wchar 来放到缓冲区中又没做处理.
赵4老师 2018-09-03
  • 打赏
  • 举报
回复
#include <conio.h>
#include <windows.h>
int main() {
int k;

while (1) {
if (kbhit()) {
k=getch();
if (0==k || 0xE0==k) k=k<<8|getch();
if (27==k) break;//按Esc键退出
cprintf("\r\n%04X\r\n",k);
}
Sleep(200);
cprintf(".");
}
return 0;
}
兰-图 2018-09-02
  • 打赏
  • 举报
回复
引用 1 楼 hongwenjun 的回复:
_ 前缀函数是非标准函数,是编译器内部函数,可能版本不同吧

刚刚又去试了一下,去掉_ 可是结果还是一样,还有没有其他的可能性呢?
hongwenjun 2018-09-02
  • 打赏
  • 举报
回复
_ 前缀函数是非标准函数,是编译器内部函数,可能版本不同吧

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧