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

如何在C语言中仅用getchar和putchar且无数组实现01-50行号打印?

当然可以实现!不过你的初始代码有几个关键问题需要调整,才能达到你想要的两位行号格式~

首先,先说说你的代码里的问题:

  • 行号格式不对:当行号超过9时,counter + '0'会输出非数字字符(比如10+'0'等于ASCII的58,也就是':'),没法正确显示两位数字;
  • 行号位置错误:你的代码是在换行之后才打印行号,但正确的逻辑应该是每一行的开头先输出行号,包括程序启动后的第一行;
  • 没有行号范围限制:你需要行号到50为止,但当前代码会一直递增到EOF。

下面是修正后的代码,完全符合你的要求——只用getchar()和putchar(),不使用数组,行号从01到50:

#include <stdio.h>

int main() {
    int c;
    int counter = 1;

    // 先打印第一行的行号(程序启动后的第一行开头需要行号)
    putchar((counter / 10) + '0'); // 输出十位数字
    putchar((counter % 10) + '0'); // 输出个位数字
    putchar(':');
    putchar(' ');

    while ((c = getchar()) != EOF && counter <= 50) {
        putchar(c);
        if (c == '\n') {
            counter++;
            // 只在不超过50行时打印下一行的行号
            if (counter <= 50) {
                putchar((counter / 10) + '0');
                putchar((counter % 10) + '0');
                putchar(':');
                putchar(' ');
            }
        }
    }
    return 0;
}

关键逻辑说明:

  • 两位行号处理:用整数除法counter / 10获取十位数字(比如1的十位是0,15的十位是1),取余counter % 10获取个位数字,再加上'0'转换成对应的ASCII字符,这样就能输出01、02...50的格式;
  • 行号位置修正:程序一开始就打印第一行的行号,之后每次遇到换行符,先输出换行,再打印下一行的行号,保证每一行开头都有正确的行号;
  • 行号范围控制:加入counter <= 50的判断,当行号超过50后,不再打印新的行号(如果需要严格只处理前50行,也可以在counter > 50时直接break退出循环)。

这样运行后,输出就会是你想要的格式:

01: mink
02: jaguar
...
50: tiger

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:16:50