gpt4 book ai didi

c - 如何反转 C 文件中的文本?

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

我试图让我的文本在该文件中从后往前阅读并以相反的顺序打印,但我的 for 循环似乎不起作用。此外,我的 while 循环正在计算 999 个字符,尽管它应该是 800 个字符(记不清了),我认为这可能是因为两个段落之间有一个空行,但那里又没有字符。

这是我的两个循环的代码-:

/*Reversing the file*/
char please;
char work[800];
int r, count, characters3;

characters3 = 0;
count = 0;
r = 0;
fgets(work, 800, outputfile);

while (work[count] != NULL)
{
characters3++;
count++;
}

printf("The number of characters to be copied is-: %d", characters3);

for (characters3; characters3 >= 0; characters3--)
{
please = work[characters3];
work[r] = please;
r++;
}
fprintf(outputfile, "%s", work);


/*Closing all the file streams*/
fclose(firstfile);
fclose(secondfile);
fclose(outputfile);
/*Message to direct the user to where the files are*/
printf("\n Merged the first and second files into the output file
and reversed it! \n Check the outputfile text inside the Debug folder!");

最佳答案

您的代码中存在一些巨大概念性缺陷。

第一个是您声明它“似乎[没有]起作用”,但没有说明您为什么这么认为。只需运行您的代码即可揭示问题所在:您根本没有得到任何输出。

这就是为什么。您反转字符串,因此终止零出现在新字符串的开头。然后您打印该字符串——它在第一个字符处立即结束。

通过减少 characters3 中循环的开始来解决这个问题。

接下来,为什么不打印一些中间结果呢?这样您就可以看到发生了什么。

string: [This is a test.
]
The number of characters to be copied is-: 15
result: [
.tset aa test.
]

嘿,看,回车似乎有问题(它在行的开头结束),这正是应该发生的事情——毕竟它是字符串的一部分——但更可能不是什么你打算做什么。

除此之外,你可以清楚地看到反转本身是不正确的!

现在的问题是您正在从相同的字符串读取和写入:

please = work[characters3];
work[r] = please;

您将末尾的字符写入位置 #0,减少末尾并增加开始,然后重复直到完成。因此,读/写的后半部分开始将 end 字符从头开始复制回 end 部分!

两个可能的修复方法:1. 从一个字符串中读取并写入一个新字符串,或者 2. 调整循环以便在“一半”完成后停止复制(因为您正在进行两次 交换每次迭代,您只需要循环 一半 个字符)。

您还需要更多地考虑交换 的含义。实际上,您的代码覆盖 字符串中的一个字符。要正确交换两个字符,您需要先将一个字符保存在临时变量中。

void reverse (FILE *f)
{
char please, why;
char work[800];
int r, count, characters3;

characters3 = 0;
count = 0;
r = 0;
fgets(work, 800, f);

printf ("string: [%s]\n", work);

while (work[count] != 0)
{
characters3++;
count++;
}
characters3--; /* do not count last zero */
characters3--; /* do not count the return */

printf("The number of characters to be copied is-: %d\n", characters3);

for (characters3; characters3 >= (count>>1); characters3--)
{
please = work[characters3];
why = work[r];
work[r] = please;
work[characters3] = why;
r++;
}
printf ("result: [%s]\n", work);
}

最后一点:您不需要“手动”计算字符数,有一个函数可以做到这一点。代替 count 循环所需要的就是这个;

characters3 = strlen(work);

关于c - 如何反转 C 文件中的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41070585/

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