【发布时间】:2016-09-04 02:41:36
【问题描述】:
我正在编写一个 C Windows 控制台应用程序,有时屏幕上会出现奇怪的像素。
更具体地说,应用程序在屏幕上写入和删除不同颜色的字符,有时似乎无法完全删除它们,而是留下一个像素。
我专门用来打印的功能是:
STATIC
STATUS
PositionPrint(
__in COORD tPosition,
__in WORD wColorAttributes,
__in TCHAR cChar
)
{
SNOWFLAKE__STATUS eRetval = STATUS_INVALID;
BOOL bConsoleRetval = FALSE;
bConsoleRetval = SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), tPosition);
RETVAL_CHECK(
bConsoleRetval,
STATUS_SET_CONSOLE_CURSOR_POSITION_FAILED,
"SetConsoleCursorPosition failed"
);
bConsoleRetval = SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColorAttributes);
RETVAL_CHECK(
bConsoleRetval,
STATUS_SET_CONSOLE_TEXT_ATTRIBUTES_FAILED,
"SetConsoleTextAttribute failed"
);
_tcprintf(_T("%c"), cChar);
lblCleanup:
return eRetval;
}
RETVAL_CHECK 宏(以防万一):
#ifdef _DEBUG
#define DEBUG_PRINT(message) (printf("%s %d %s %d %s\n", __FILE__, __LINE__, __FUNCTION__, GetLastError(), (message)))
#else
#define DEBUG_PRINT(message)
#endif
#define RETVAL_CHECK(_condition, _error, _message) \
do \
{ \
if (!(_condition)) \
{ \
eRetval = (_error); \
DEBUG_PRINT(_message); \
goto lblCleanup; \
} \
} while (0,0)
要删除一个字符,我只需在同一位置打印一个空格。
我的电脑上有 Windows 10。
有谁知道是什么导致了问题或如何解决?
【问题讨论】:
-
你能给我们看看这些神秘像素的截图吗?
-
这种事情通常是其他地方未定义行为的副作用,例如在数组外部写入。这些控制台函数本身不太可能有随机行为。
-
捕获和上传太小。它只是单个浮动像素,通常是字母所在的位置。我还注意到像素会自行消失
-
您的描述强烈表明您的代码有一些未定义的行为。建议使用调试器并单步执行代码,
-
@user3629249
while不是函数——它是一个有效但无用的 C 语句。