我需要一些关于如何反转标准输入内容的建议。这是我处理反转标准输入的代码的一部分:
int reversestdin(FILE *file)
{
int a, b;
int lineas=0;
while ((a=fgetc(stdin)) !=EOF)
{
if (a=='\n')
lineas++;
}
for(b=0; b<lineas; b++)
{
rewind(stdin);
int d,len, e;
char str[2048], *ptr;
for(e=0; e<=b; e++)
{
fgets(str, 2048, stdin);
}
ptr=str;
for(d=0; d<2048; d++)
{
if(*ptr=='\n') break;
if(*ptr=='\0') break;
ptr++;
}
len=d;
ptr--;
for(d=len; d>0; d--)
{
printf("%c", *ptr--);
}
printf("\n");
}
return 0;
}
我还有一个名为 example1 的 .txt 文件,其内容如下:
LINE 1.1
LINE 1.2
LINE 1.4
此代码在我执行时有效./myprogram < example1.txt
。它输出
1.1 ENIL
2.1 ENIL
4.1 ENIL
但是,如果我执行echo "This text should be reversed" | ./myprogram
它输出:
(
而已。一个开放的括号。我发现如果我省略了我的代码中计算行数的部分,只是手动说有 1 行它可以工作(当然是 1 行)。
int reversestdin(FILE *file)
{
int a, b;
int lineas=1;
//while ((a=fgetc(stdin)) !=EOF)
//{
//if (a=='\n')
//lineas++;
//}
for(b=0; b<lineas; b++)
{
rewind(stdin);
int d,len, e;
char str[2048], *ptr;
for(e=0; e<=b; e++)
{
fgets(str, 2048, stdin);
}
ptr=str;
for(d=0; d<2048; d++)
{
if(*ptr=='\n') break;
if(*ptr=='\0') break;
ptr++;
}
len=d;
ptr--;
for(d=len; d>0; d--)
{
printf("%c", *ptr--);
}
printf("\n");
}
return 0;
}
它现在输出
desrever eb dluohs txet sihT