Q: 从标准输入读取几行输入,每行输入都要打印到标准输出上,前面需加上行号,输入行长度没有限制。
/*从标准输入复制到标准输出,并对输出行标号*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int ch;
int line;
int at_beginning; /*行起始位置*/
line = 0;
at_beginning = 1;
/*读取字符并逐个处理他们*/
while((ch = getchar()) != EOF)
{
/*如果我们位于一行的起始位置,打印行号*/
if(at_beginning == 1)
{
at_beginning = 0;
line += 1;
printf("%d",line);
}
/*打印字符,并对行尾进行检查*/
putchar(ch);
if(ch == '\n')
at_beginning = 1;
}
return EXIT_SUCCESS;
}
通过从输入中逐字进行读取而不是逐行读取,可以避免行长度限制。
补充:c++版
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i=0;
string line;
while(getline(cin, line)) /*getline整行文本读取*/
cout<< ++i<< line
<< endl;
return 0;
}
如果写成:while(cin >> line)
则就是读取一组string对象,然后在标准输出上逐行输出。