用C语言:打开一个文本(文本中含有一个字符串),将文本中的字符串逆序输出,保存到一个新的文本中

用C语言:打开一个文本(文本中含有一个字符串),将文本中的字符串逆序输出,保存到一个新的文本中

第1个回答  推荐于2016-03-05
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define FILE_NAME 80
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1

int main( void )
{

char file_name[FILE_NAME];
char ch;
FILE *fp;

printf( "ShuRu file name:" );
gets( file_name );

if ( ( fp = fopen( file_name, "r+" ) ) == NULL )
{

fputs( "open file error!",stderr );
system( "pause" );
exit( EXIT_FAILURE );

}

fseek( fp, 0L, SEEK_END );

do
{

fseek( fp, -1L, SEEK_CUR);
ch = fgetc( fp );
putchar( ch );
fseek( fp, -1L, SEEK_CUR );

}
while ( ch != EOF );

system( "pause" );

return 0;
}追问

为什么输入完文件名,运行之后出现了乱码。一直跳W

追答

为啥我没有?完美运行

我输入的是 This is main!

你可以在源代码结尾的system()上面一行加个putchar('\n'),

这样Press any key to continue...就在下一行了

追问

需要将文本放到指定的什么位置吗?

追答

不用,直接输入文件的绝对路径。
例如 d:\c\a.txt

追问

我是放在F盘的c.txt文本

我输入

运行以后变成这样

追答

你这是c++文件,不是c文件啊,
文件你没改吧,我用vs试一试,现在我用的这个是turbo c3.0

追问

大神帮忙看下 用什么文件可以

追答

第3个
学习用就用turbo c,dev c++,c-free,vs吧
vc太老了,而且w7的兼容性不好,以上几个兼容性过关,其中turbo 推荐32位
其余的都有64位的
等学的有点程度了就用vs2010或者vs2013,这可以一直用到以后工作,开发工程(如果你有那么NB)
学习推荐turbo c3.0就行了,经典,好用,才3.2M

好了,回归正题,这程序我Turbo c3.0完美运行,看来你用的那vc有错,
我把我的代码改改,你在试试。

#include
#include
#include

#define FILE_NAME 80
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1

int main( void )
{

char file_name[FILE_NAME];
char ch;
FILE *fp;
long pos_set;
long pos_cur;

printf( "ShuRu file name:" );
gets( file_name );

if ( ( fp = fopen( file_name, "r+" ) ) == NULL )
{

fputs( "open file error!",stderr );
system( "pause" );
exit( EXIT_FAILURE );

}

pos_set = ftell( fp );
fseek( fp, 0L, SEEK_END );

do
{
fseek( fp, -1L, SEEK_CUR);
ch = fgetc( fp );
putchar( ch );
fseek( fp, -1L, SEEK_CUR );

pos_cur = ftell( fp );

}
while ( pos_cur != pos_set );

putchar('\n');
system( "pause" );

return 0;
}

追问

可以完美运行了!感谢大神!
不过需要把逆序好的字符串再转存到一个新的文本中。
大神帮忙添加下这个功能。万分感谢!

追答

太长了,只有传源文件给你,

之前给你的代码,我忘了加fclose,自己加上,还有

你真的是太懒了(⊙﹏⊙)b

追问

感谢!我不是不想弄,是不会。。
老师要我做的。
实在感谢!!

本回答被提问者和网友采纳
第2个回答  2015-05-18
#include<stdio.h>
#include<string.h>
#define MAX 1024

void reverse(char *s)
{
char c;
int i, k=0;
while(s[k] !='\0')
k++;
for(i=0;i<(k/2)-1;i++)
{
c=s[i];
s[i]=s[k-i-1];
s[k-i-1]=c;

}

}
void main(int argc,char*argv[])
{
// char line[MAX];
char s[MAX];
FILE *fpin,*fpout;
if ((fpin=fopen("yuanwenjianming.txt","r"))==NULL)
gets(s);
else
fgets(s,MAX,fpin);
printf("beffor reverse\n");
fputs(s,stdout);
fputc('\n',stdout);
reverse(s);
printf("affter reverse\n");
fpout=fopen("2.txt","w");
fputs(s,fpout);
fputs(s,stdout);
fputc('\n',stdout);

}追问

这个没有对文本中的字符串操作吧?
怎么是需要自己输入一个字符串,我希望的是对文本中已有的字符串进行逆序
要求输入文本的名字 ,然后逆序操作完 ,另存一个文本
请大神再改改 谢谢啦