[英]Why doesn't my visual studio 2k8 C++ project work with unicode characters?
[英]Why doesn't my code work in visual studio?
这是我的代码
#include <conio.h>
#include <iostream>
using namespace std;
int main() {
bool a = false;
char b='p';
int c=0;
while (a != true) {
if (_kbhit()) {
b = _getch();
}
if (b=='w') {
c++;
cout << c << " ";
}
else if (b == 'c') {
cout << "hello";
}
}
system("pause");
return 0;
}
问题是当我按下“w”时,我希望它打印出 c 的值,它应该重复直到我按下_kbhit()
另一个输入,对吗? 因为现在它在 c 上加 1 然后打印 c 并且当我再次按 w 时同样的事情。 我的 Visual Studio 有什么问题我正在使用社区 2017 我试图卸载它并重新安装它,但发生了同样的问题。
您遇到的问题似乎是最近在_getch()
/ _kbhit
添加的错误_kbhit
。
对于扩展键(例如,光标键),据记载_getch()
返回 0x0 或 0xe0 后跟实际按下的键的扫描码。 没有记录的是,如果用户按下非扩展键, _kbhit
仍会连续两次返回true
,调用_getch()
将第一次返回键码,第二次返回 0x0。
在您的代码中,当用户按下 'w' 或 'c' 时, _kbhit
会返回true
(如您所料),还会返回两次。 第一次调用它时,它会返回密钥的扫描码,第二次它会返回一个 0 字节。
您的代码中发生的事情是您正在阅读扫描代码,适当地打印一些东西,然后_kbhit
再次返回true
,因此您读取了 '\\0' 字节,将b
设置为 '\\0',然后(因为您不当b
为 0 时,没有任何代码可以执行任何操作)您(反复)在用户下次按下某个键之前什么都不做。
参考
https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getch-getwch?view=vs-2017
该程序似乎按照您希望的方式运行。 如果我按“w”,它会进入一个无限循环,增加c
的值并打印它。 按任何其他键停止打印,按 'c' 继续无限循环并打印hello
。 就发布的代码而言,似乎没有任何问题。 另外,我想和@Someprogrammerdude 说同样的话,如果它编译了,但没有按照你想要的方式运行,这是代码的问题,而不是 IDE 和/或编译器的问题。
假设答案:您的计算机可能总是认为某个键被按下,因此kbhit()
总是返回 true。 这可能是由错误的鼠标/键盘/控制器驱动程序和/或配置引起的。 代码没问题,你的电脑不行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.