给出的代码是:
#include<stdio.h>
int main()
{
char ch;
while((ch=getc(stdin))!=EOF)
putc(ch,stdout);
return 0;
}
我试过了:
import sys
ch=sys.stdin.read(1)
while (len(ch)>0):
sys.stdout.write(ch + '\n')
ch=sys.stdin.read(1)
实现此代码的更好方法是什么?
答案 0 :(得分:4)
你的尝试非常接近正确。问题是+ '\n'
。您不希望在每个输入字符后写一个换行符。输入中的任何换行都将被读取并写入输出;这可能就是你想要的。
import sys
ch = sys.stdin.read(1)
while (len(ch)>0):
sys.stdout.write(ch)
ch = sys.stdin.read(1)
你也可以循环遍历sys.stdin
来逐行读取,但是如果你这样做,Python将以块的形式读取输入,并且在你填满一块或输入之前你不会看到任何输出一个EOF:
import sys
for line in sys.stdin:
sys.stdout.write(line)
我们可以使用sys.stdin.readline
来获得更快的输出,iter
不使用相同的分块机制:
import sys
for line in iter(sys.stdin.readline, ''):
sys.stdout.write(line)
此代码使用{{3}}的非常见的2参数形式,它生成一个迭代器,它反复调用作为第一个参数提供的函数来生成值,当函数生成作为第二个参数给出的值时停止。
答案 1 :(得分:3)
由于Python默认将输出缓冲到换行符,因此需要在每个字符后刷新:
import sys
while True:
try:
line = raw_input()
except: break
for c in line:
sys.stdout.write(c)
sys.stdout.flush()
sys.stdout.write('\n')