【问题标题】:Random pixels appearing in console window控制台窗口中出现的随机像素
【发布时间】: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 语句。

标签: c windows


【解决方案1】:

我认为这只是我的字体的问题。
我将默认 CMD 字体设置为 Courier New(用于希伯来语支持)。
改回 Lucida Console 似乎解决了这个问题。

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多