首页 > 解决方案 > 如果使用 CLion 而不是直接使用 gcc 编译,C 程序的行为会有所不同。为什么?

问题描述

我正在编写一个使用 C90 连续播放 4 个的程序。

我使用 ASCII 字符为控制台制作了一个 UI。

如果我使用 C Lion 编译程序,我会得到以下输出:

屏幕截图 C Lion 输出

如果我使用 gcc main.c 编译它然后运行 ​​./a.out 我得到以下结果:

截图终端输出

所以很明显,如果我直接使用 gcc 编译它,这个点字符的大小会有所不同。

有谁知道这怎么可能发生?

负责打印游戏行的代码如下所示:

void printGameLine(int line[7]) {
    int i;
    printf("┃");
    for (i = 0; i < 7; ++i) {
        printColor(line[i]);
        line[i] == 0 ? printf("    ") : printf(" ⬤ ");
        printColor(0);
        printf("┃");
    }
    printf("\n");
}

负责颜色的代码如下所示:(如果这有什么不同)

/**
 * prints the color
 * @param player -1 First player, 0 neutral, 1 Second Player
 */
void printColor(int player) {
    switch (player) {
        case 1:
            printf("\033[0;31m"); /*red*/
            break;
        case -1:
            printf("\033[0;33m");/*yellow*/
            break;
        default:
            printf("\033[0m");/*neutral*/
            break;
    }
}

标签: cgccclion

解决方案


问题在于 CLion 控制台的字体选择。

  • 转到文件/[设置...] 然后编辑器/[配色方案]/[控制台字体]
  • 禁用“使用控制台字体而不是默认字体”复选框
  • 选择合适的等宽字体(我使用 Fira Code)

配置截图

之后确保对空位置和“ball'd”位置使用相同长度的字符串。


推荐阅读