我正在用C / C ++创建一个基本的控制台应用程序。
在下面的示例中,我反复将一些char延迟50ms写入控制台,我希望它在敲键时退出程序。
func add(a: Int, b: Int) -> Int {
return a + b
}
func mult(a: Double, b: Double) -> Double {
return a * b
}
var functions = [Any]()
var inputs = [[Any]]()
let f: ([Any]) -> Any = { arr in
return add(a: arr[0] as! Int, b: arr[1] as! Int) as Any
}
functions.append(f)
inputs.append([3, 5])
let g: ([Any]) -> Any = { arr in
return mult(a: arr[0] as! Double, b: arr[1] as! Double) as Any
}
functions.append(g)
inputs.append([6.0, 7.0])
// Each time through the loop, get one function stored as Any and
// one array of inputs with type [Any]
for (function, input) in zip(functions, inputs) {
// Downcast function from Any to ([Any]) -> Any
let f = function as! ([Any]) -> Any
// Call the function
print(f(input))
}
我的问题是,在我的项目中,只有当我在此处放置断点时,它才会进入条件8
42.0
:
#include "pch.h"
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int PauseRet(int iDuree) {
unsigned int uiTemps = GetTickCount();
int iVal = 0;
do {
if (_kbhit()) {
iVal = _getch();
}
} while ((GetTickCount() - uiTemps) < (unsigned int)iDuree);
return iVal;
}
int main()
{
char c = 0;
int iTempo = 50;
while (true) {
putchar('a');
c = PauseRet(iTempo);
if (c) {
return 0;
}
}
}
我正在使用Visual Studio 2017。
我在新项目的另一台PC上尝试过此代码,但没有任何问题
我相信这与我的项目设置有关。
答案 0 :(得分:2)
您可能会遇到#define _MAX_PATH 260 /* max. length of full pathname */
#define HANDLE int
#define MAX_PATH 260
#define TRUE true
#define FALSE false
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define min(a,b) (((a) < (b)) ? (a) : (b))
typedef int BOOL;
typedef unsigned long DWORD;
typedef void VOID;
typedef wchar_t WCHAR;
typedef WCHAR *LPWSTR;
typedef unsigned char BOOLEAN;
的小错误。在SDK _getch()
上,错误是10.0.17134.0
将返回所按下的键,而在下一次调用时返回0。
没有断点,_getch()
可能会返回true一次以上,这会将0放入_kbhit
中,而您的c
将永远不会过去。
使用断点时,一旦按下该键,它将在此处停止,随后将及时释放该键,一旦您从断点继续,if(c)
将返回所按下的键,而{{1} }将不再返回true。循环退出后,您在_getch()
中将具有一个非零值。
要解决此问题,请再次运行VS 2017设置并更新(或在4月更新之前降级到某些版本)和/或下载较新的SDK或使用_kbhit