stdin の内容を元に戻す方法についてアドバイスが必要です。これは、標準入力の反転を処理するコードの一部です。
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