gpt4 book ai didi

c - 在 C 中反转标准输入

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:27 24 4
gpt4 key购买 nike

我需要一些关于如何反转标准输入内容的建议。这是我的代码中处理反转标准输入的部分:

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

最佳答案

你不能倒回 stdin!

你应该修改你的逻辑,这样你就可以一直读到 EOF 而不是试图事先计算行数。

关于c - 在 C 中反转标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com