反转文件的n个字符

时间:2015-05-14 13:23:38

标签: c file-io

我正在尝试编写一个小程序来反转文件中文本的前n个字符。我写了这个::

void getdata(FILE *fp)
{
    char ch;
    printf("Enter text::\n");
    while((ch=getchar())!=EOF)
        fputc(ch,fp);
}

void printdata(FILE *fp)
{
    char ch;
    while((ch=fgetc(fp))!=EOF)
        putchar(ch);
}

void reverse(FILE *fp, int n)
{
    char ch[20];
    for( int i=0;i<n;++i)
        ch[i]=fgetc(fp);
    rewind(fp);
    printf("%.*s\n",n,ch); //printing the string
    while(n--)
        fputc(ch[n-1],fp);
}

int main()
{
    FILE *fp;
    int n;
    fp=fopen("music.txt","w+");
    getdata(fp);
    rewind(fp);
    printf("Number of chars to reverse:: ");
    scanf("%d",&n);
    reverse(fp,n);
    rewind(fp);
    printf("After reversing text is::\n");
    printdata(fp);
    fclose(fp);
    return 0;
}

输出是 enter image description here

我哪里错了?为什么会有'你'? 编辑:我可以通过用

替换while循环来实现它
for( int i=0;i<n;++i)
        fputc(ch[n-1-i],fp);

但是那时的错误是什么?

2 个答案:

答案 0 :(得分:1)

你的故障是第一次循环递减n。在您的用例n中,请从4开始,而不是5。然后,您在n-1分配了字符,这意味着n必须从5开始。最后,您的循环时间为4而不是5

更改

while(n--)
        fputc(ch[n-1],fp);

do
{
   fputc(ch[n-1],fp);
}while(--n);

另一件小事。您的反向功能不是检查传递的n不能是&gt; ch长度,在你的情况下20。

答案 1 :(得分:0)

for( int i=0;i<n;++i)   //consider n as 5
    fputc(ch[n-1-i],fp);//  ch[5-1-0] ch[5-1-1] ch[5-1-2] ...

不等于

while(n--)              //consider n as 5
    fputc(ch[n-1],fp);  //ch[4-1] ch[3-1] ....

while(n--)之后的while循环中,当控制到达fputc(ch[n-1],fp)时n已经递减。