如何在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; }
代码说明
- 将每张卡牌拆分为多行独立字符串存入数组,方便单独访问每一行内容。
- 通过循环遍历每一行,同时打印两张卡牌的对应行,中间用
|分隔,最后加\n完成整行输出。 - 这种方式能保证两张卡牌在水平方向上对齐并排。
扩展建议
如果后续要支持更多卡牌,可以将卡牌行数组封装为结构体,或者编写通用打印函数接收多张卡牌的行数组,提升代码复用性。
内容的提问来源于stack exchange,提问作者Parstoukas
相关产品推荐
相关产品推荐

