【发布时间】:2016-10-18 19:11:52
【问题描述】:
此代码确实反转并将结果放入文件中,但并不完全正确。 比如,检测线路断路器或某事的一些问题。这是一个例子:
来源:
This is a line.
This is another line.
Quick brown fox jumps over a lazy dog!
结果:
(blank line)
.enil a si sihT
.enil rehtona si sihT!god yzal a revo spmuj xof nworb kciuQ
#include <stdio.h>
#include <string.h>
char *reverse (char *str)
{
char *begin, *end, c;
if (!str || !(*str))
return NULL;
for (begin=str, end=str+strlen(str)-1; begin<end; begin++, end--)
{
c=*begin;
*begin=*end;
*end=c;
}
begin=str+strlen(str)+1; *begin='\0'; //??
return str;
}
void main(void)
{
char line[1000];
FILE *fsrc, *frslt;
fsrc=fopen("source.txt", "r");
if (fsrc==NULL) return;
frslt=fopen("result.txt", "w");
while (!feof(fsrc))
{
fgets (line, 1000, fsrc);
fputs (reverse(line), frslt);
}
fclose(fsrc);
fclose(frslt);
}
【问题讨论】:
-
代码工作正常,但它倒转的线路太好了。正在发生的事情是换行符(
\n)也被反转了,所以换行符被放置在每行的开头,但是“The quick brown fox...”没有换行符最后,这就是为什么第 2 行和第 3 行被挤在一起的原因。尝试使用\n作为要反转的行尾。 -
你不需要它,因为你在原地工作:
begin=str+strlen(str)+1; *begin='\0';并且你添加了太多(没问题,因为缓冲区更大但仍然......) -
我个人会remove the newline that fgets puts in the buffer,然后在输出反转文本后换行。
标签: c