gpt4 book ai didi

c - 反转文件的 n 个字符

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:49 25 4
gpt4 key购买 nike

我正在尝试编写一个小程序来反转文件中文本的前 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);

但是这会儿有什么错呢?

最佳答案

您 while 中的错误是第一个循环递减 n。在您的用例中,n4 而不是 5 开始。然后您在 n-1 分配字符,这意味着 n 必须从 5 开始。最后你的循环是 4 而不是 5

改变

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

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

又是一件小事。您的反向函数不检查传递的 n 不能 > ch 长度,在您的情况下为 20。

关于c - 反转文件的 n 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238535/

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