C:一行一行地把文件倒过来

C:一行一行地把文件倒过来,c,C,我正在尝试使用递归逐行反转文件。所以基本上是一个输入。我正在寻找一种不使用任何指针或数组就可以开始的方法。如果你能给我指出正确的方向,那就太好了 dogs cats 将有一个输出 sgod stac 这就是我的源代码到目前为止的样子,但我一直在颠倒整个文本文件(通过命令行

我正在尝试使用递归逐行反转文件。所以基本上是一个输入。我正在寻找一种不使用任何指针或数组就可以开始的方法。如果你能给我指出正确的方向,那就太好了

dogs
cats
将有一个输出

sgod
stac
这就是我的源代码到目前为止的样子,但我一直在颠倒整个文本文件(通过命令行<)而不是行

#include <stdio.h>

void Recursion();
int main (int argc, char argv)
{
  Recursion();
  printf("\n");
}

void Recursion()
{
  int c;
  while((c = getchar()) != EOF)
    {
      Recursion(c);
      printf("%c",c);
    }
}
#包括
无效递归();
int main(int argc、char argv)
{
递归();
printf(“\n”);
}
void递归()
{
INTC;
而((c=getchar())!=EOF)
{
递归(c);
printf(“%c”,c);
}
}

首先,必须确保函数“递归”可以在一行中工作。您的函数“递归”可以这样声明:

//source must have pointed to storage space of the line and the 
//storage space of line must be not read-only. As we know "dogs" is  
// a constant value you can't change.

int Recursion(char *source,int length);
将字符串“dogs”输入递归,输出必须是“sgod”

然后,您可以读取文件的每一行,并将它们输入到这个递归函数中,以便获得所需的结果

我认为函数递归可能有错误,或者您无法从文件中读取行。如果你能给我一些关于函数递归或读取文件模块的详细代码,就很容易找出错误

您正在使用函数getchar()而不是从文件中读取行。所以“EOF”不正确,应该是“\n”。您也不应该在递归中使用while,因为它已经是一个递归函数了。因此,正确的代码如下:

void Recursion()
{
  int c;
  if((c = getchar()) != '\n')
  {
     Recursion(c);
     printf("%c",c);
  }
  else
     return;
}
我认为你的代码不好。在我看来,反转字符串的函数不需要递归,就像这样:

int Recursion(char *source,int length);
int main()
{
    int fd = open();

    while(1)
    {
       // 1.read line
       ....
       //2. is EOF?
       break;
       //3. reverse line
       Recursion(line,strlen(line));
    }
}
这样你就可以把程序分成单独的模块——读行模块和反转模块。因此,主要功能如下所示:

int Recursion(char *source,int length);
int main()
{
    int fd = open();

    while(1)
    {
       // 1.read line
       ....
       //2. is EOF?
       break;
       //3. reverse line
       Recursion(line,strlen(line));
    }
}

我希望这能对您有所帮助。

如果您确实想使用递归执行此操作,请执行以下操作:

#include <stdio.h>

int recursion() {
    int c = getchar();
    if(c != '\n' && c != EOF) {
        int n = recursion();
        printf("%c", c);
        return n;
    } else {
        return c;
    }
}

int main (void) {
    while(recursion() != EOF) printf("\n");
}
#包括
int递归(){
int c=getchar();
如果(c!='\n'&&c!=EOF){
int n=递归();
printf(“%c”,c);
返回n;
}否则{
返回c;
}
}
内部主(空){
而(递归()!=EOF)printf(“\n”);
}

然后读一行,反转它,读下一行并反转它,然后读下一行并反转它。。。。继续这样做,直到没有更多的行可以读。如果你想读一行,请查阅
fgets
。这会一直查到错误的函数原型,括号中没有参数……第一步是关闭计算机。接下来,拿一支铅笔和一张纸,用文字解释解决问题所需的步骤。没有参数的声明的可能重复可能不是这里的根本问题,但如果您感兴趣,您可以阅读C和。函数的代码
Recursion()
就在问题帖中!在这个问题中,您并没有从文件中读取字符串。所以函数应该是这样的。我已经修正了我的答案。程序正在读取
stdin
,如果
stdin
被重定向,它可能是一个文件。我明白了。如果要使用EOF标志,应按Ctrl+D以在stdin中生成EOF。您可以从命令行重定向文件。在Linux中,使用
/a.out
调用程序,使
stdin
从文件中读取。