使用getchar和putchar在c中打印行号

printing line number in c using getchar and putchar

有没有办法在只使用 putchargetchar 而不使用数组的情况下在 C 中打印出行号?

输出应该是这样的。 例如输入 mink

01: mink
02: jaguar 

等等

行号应该从 0150

这是我的开始方法

#include <stdio.h>

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

    while ((c = getchar()) != EOF) {
        putchar(c);
        if (c == '\n') {
            putchar(counter + '0');
            putchar(':');
            putchar(' ');
            ++counter;
        }
    }
    return 0;
}

假设行号只有2位数字,计算并输出这些数字和:前缀。为避免在文件开头重复代码并避免在文件结尾后为不存在的行打印行号,请在每行的第一个字符之前打印行号,即 after 如果有另一个字符则换行。将 lastc 初始化为 '\n' 确保在文件的第一行之前打印行号,如果至少有一行的话。

这是一个简单的实现:

#include <stdio.h>

int main() {
    int c, lastc = '\n';
    int counter = 1;

    while ((c = getchar()) != EOF) {
        if (lastc == '\n') {
            putchar('0' + counter / 10 % 10); // tenths digit
            putchar('0' + counter % 10);      // units digit
            putchar(':');
            putchar(' ');
            counter++;
        }
        putchar(c);
        lastc = c;
    }
    return 0;
}

您需要除以 10 并 mod 得到 10 位和个位。

#include <stdio.h>
int main()
{
    int c;
    int counter=1;
    putchar('0');
    putchar('1');
    putchar(':');
    putchar(' ');
    while((c=getchar())!=EOF){
        putchar(c);
        if ( c == '\n' ) {
            ++counter;
            putchar(counter / 10 + '0');
            putchar(counter % 10 + '0');
            putchar(':');
            putchar(' ');

        }
    }
    return 0;
}