如何在C语言中通过单循环同时按列打印多行内容?
用单个循环在C语言中实现多行按列打印
你需要将原本用两个循环分别打印F(n)和M(n)序列的代码,改成用单个循环实现,同时输出符合以下格式的内容:
F(n):
0 1 1 2 2 3 3 4 4 5 5 6
M(n):
0 -1 1 0 2 1 3 2 4 3 5 4
原代码如下:
int M(int n){return n+1;} int F(int n){return n-1;} int main(void) { int n; printf("F(n):\n"); for (n = 0; n <= 5; n++) { printf("%d %d ", n, F(n)); } printf("\nM(n):\n"); for (n = 0; n <= 5; n++) { printf("%d %d ", n, M(n)); } printf("\n"); }
解决方案
可以通过缓冲区存储的方式,在单个循环中分别收集两行的输出内容,循环结束后一次性打印结果,实现需求。
示例代码:
#include <stdio.h> int M(int n){return n+1;} int F(int n){return n-1;} int main(void) { // 定义足够大的缓冲区存储两行输出内容 char f_line[100] = {0}; char m_line[100] = {0}; int n; // 单个循环同时收集两行的内容 for (n = 0; n <= 5; n++) { // 将当前n和F(n)追加到F行缓冲区 sprintf(f_line, "%s%d %d ", f_line, n, F(n)); // 将当前n和M(n)追加到M行缓冲区 sprintf(m_line, "%s%d %d ", m_line, n, M(n)); } // 按格式打印结果 printf("F(n):\n%s\n", f_line); printf("M(n):\n%s\n", m_line); return 0; }
代码说明
- 用两个字符数组作为缓冲区,在循环中通过
sprintf把每一组n和函数计算结果追加到对应行的缓冲区中 - 循环仅执行一次,完成所有数据的收集
- 最后一次性打印两行内容,完全匹配预期输出格式
如果担心固定大小缓冲区不够用,也可以使用动态内存分配来适配更大的输出范围,核心逻辑保持一致。
内容的提问来源于stack exchange,提问作者Eeark
相关产品推荐
相关产品推荐

