You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中实现含换行符元素的同行打印?

C语言实现二十一点卡牌并排打印

期望输出效果

希望卡牌在同一行并排打印,样式如下:

___________   ___________
| K       K | | Q       Q |
|           | |           |
| +       + | | +       + |
|     +     | |     +     |
| +       + | | +       + |
|           | |           |
| +       + | | +       + |
|     +     | |     +     |
| +       + | | +       + |
|___________| |___________|

现有问题代码

你当前的代码因字符串内置换行符,导致卡牌上下排列:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    const char *card_k=
    "\n ___________ " 
    "\n| K       K |"
    "\n|           |"
    "\n| +       + |"
    "\n|     +     |"
    "\n| +       + |"
    "\n|           |"
    "\n| +       + |"
    "\n|     +     |"
    "\n| +       + |"
    "\n|___________|";
    const char *card_q=
    "\n ___________ " 
    "\n| Q       Q |"
    "\n|           |"
    "\n| +       + |"
    "\n|     +     |"
    "\n| +       + |"
    "\n|           |"
    "\n| +       + |"
    "\n|     +     |"
    "\n| +       + |"
    "\n|___________|";

    printf("%s",card_k);
    printf("%s",card_q);

    system("Pause");
    return 0;
}

问题根源

每张卡牌的字符串开头都带有\n,且每一行结束后自动换行,导致两张卡牌依次垂直输出。

解决方案

要实现并排打印,需按行同步输出:先打印两张卡牌的第一行,再打印第二行,以此类推。可以将每张卡牌的每一行拆分为独立字符串,通过循环逐行拼接打印。

修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

// 将每张卡牌拆分为多行独立字符串,移除开头的换行符
const char *card_k_lines[] = {
    " ___________ ",
    "| K       K |",
    "|           |",
    "| +       + |",
    "|     +     |",
    "| +       + |",
    "|           |",
    "| +       + |",
    "|     +     |",
    "| +       + |",
    "|___________|"
};

const char *card_q_lines[] = {
    " ___________ ",
    "| Q       Q |",
    "|           |",
    "| +       + |",
    "|     +     |",
    "| +       + |",
    "|           |",
    "| +       + |",
    "|     +     |",
    "| +       + |",
    "|___________|"
};

int main()
{
    // 卡牌共11行,循环逐行打印两张卡牌的对应行
    for (int i = 0; i < 11; i++) {
        printf("%s | %s\n", card_k_lines[i], card_q_lines[i]);
    }

    system("Pause");
    return 0;
}

代码说明

  1. 将每张卡牌拆分为多行独立字符串存入数组,方便单独访问每一行内容。
  2. 通过循环遍历每一行,同时打印两张卡牌的对应行,中间用|分隔,最后加\n完成整行输出。
  3. 这种方式能保证两张卡牌在水平方向上对齐并排。

扩展建议

如果后续要支持更多卡牌,可以将卡牌行数组封装为结构体,或者编写通用打印函数接收多张卡牌的行数组,提升代码复用性。

内容的提问来源于stack exchange,提问作者Parstoukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:50:33