文件排序(不明白在哪错了)

Hercules1982 2005-07-18 07:01:00
一个输入文件如:input.txt
xfg
der
sdfg
输出文件为:ouput.txt
der
sdfg
xfg
按ASCII码排序
这是我的程序,不知在哪错了,得不到正确结果,请高手执教。
#include <stdio.h>

int main()
{
FILE *F_inputFile,*F_outputFile;
char ach_tmp[1024],ach_cmp[1024],ach_swap[1024];
int i_cmp=1,i_switch=1,i_flag=0,i_first=0;
F_inputFile = NULL;
F_outputFile = NULL;
memset(ach_tmp,'\0',1024);
memset(ach_cmp,'\0',1024);
if(NULL == (F_inputFile = fopen("\input.txt","rt")))
{
printf("open file error\n");
}
if(NULL ==(F_outputFile = fopen("\output.txt","wt")))
{
printf("create a file error\n");
}
while(NULL!=fgets(ach_tmp,1024,F_inputFile))
{
i_cmp=1,i_switch=1,i_flag=0;
if(NULL==(F_outputFile=fopen("\output.txt","rt",F_outputFile)))
{
printf("reopen file error\n");
}
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(strcmp(ach_tmp,ach_cmp)<0)
{
break;
}
i_cmp++;
}
strcpy(ach_swap,ach_tmp);
fclose(F_outputFile);
F_outputFile=fopen("\output.txt","rt+",F_outputFile);
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(1==i_flag)
{
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("1%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
strcpy(ach_swap,ach_cmp);
}
if(i_cmp==i_switch)
{
strcpy(ach_swap,ach_cmp);
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("2%s\n",ach_tmp);
fputs(ach_tmp,F_outputFile);
i_flag=1;
}
memset(ach_cmp,'\0',1024);
fclose(F_outputFile);
F_outputFile=fopen("\output.txt","rt+",F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,i_switch*1024L,0);
i_switch++;
}
if(NULL==fgets(ach_cmp,1024,F_outputFile))
{
//fclose(F_outputFile);
F_outputFile=freopen("\output.txt","at+",F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,0L,2);
printf("3%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
fclose(F_outputFile);
memset(ach_cmp,'\0',1024);
}
memset(ach_tmp,'\0',1024);
}
fclose(F_inputFile);
}

...全文
322 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
Willpro 2005-07-19
  • 打赏
  • 举报
回复
#include <stdio.h>
#include<stdlib.h>

int main()
{
FILE *F_inputFile,*F_outputFile;
char ach_tmp[1024],ach_cmp[1024],ach_swap[1024];
int i_cmp=1,i_switch=1,i_flag=0,i_first=0;
F_inputFile = NULL;
F_outputFile = NULL;
memset(ach_tmp,'\0',1024);
memset(ach_cmp,'\0',1024);
if(NULL == (F_inputFile = fopen("input.txt","rt")))
{
printf("open file error\n");
}
if(NULL ==(F_outputFile = fopen("output.txt","wt")))
{
printf("create a file error\n");
}
while(NULL!=fgets(ach_tmp,1024,F_inputFile))
{
i_cmp=1,i_switch=1,i_flag=1;
if(NULL==(F_outputFile=freopen("output.txt","rt",F_outputFile)))
{
printf("reopen file error\n");
}
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(strcmp(ach_tmp,ach_cmp)<0)
{
break;
}
i_cmp++;
}
strcpy(ach_swap,ach_tmp);
fclose(F_outputFile);
F_outputFile=fopen("output.txt","rt+");
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(1==i_flag)
{
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("1%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
strcpy(ach_swap,ach_cmp);
}
if(i_cmp==i_switch)
{
strcpy(ach_swap,ach_cmp);
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("2%s\n",ach_tmp);
fputs(ach_tmp,F_outputFile);
i_flag=1;
}
memset(ach_cmp,'\0',1024);
fclose(F_outputFile);
F_outputFile=fopen("output.txt","rt+");
rewind(F_outputFile);
fseek(F_outputFile,i_switch*1024L,0);
i_switch++;
}
if(NULL==fgets(ach_cmp,1024,F_outputFile))
{
/*fclose(F_outputFile); */
F_outputFile=freopen("output.txt","at+",F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,0L,2);
printf("3%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
fclose(F_outputFile);
memset(ach_cmp,'\0',1024);
}
memset(ach_tmp,'\0',1024);
}
fclose(F_inputFile);
}
CSDNWW 2005-07-19
  • 打赏
  • 举报
回复
return (strcmp(_Left.c_str(), _Right.c_str()) < 0); 更好
CSDNWW 2005-07-19
  • 打赏
  • 举报
回复
****************************
一个输入文件如:input.txt
xfg
der
sdfg
输出文件为:ouput.txt
der
sdfg
xfg
按ASCII码排序
这是我的程序,不知在哪错了,得不到正确结果,请高手执教。
***************************************************
只是实现这个, 用得了这么复杂?
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <iostream>
#include <list>

using namespace std;


struct greater2
{ // functor for operator>
bool operator()(const string& _Left, const string& _Right) const
{ // apply operator> to operands
if (strcmp(_Left.c_str(), _Right.c_str()) < 0)
return true;
else
return false;
}
};



int main()
{
FILE *F_inputFile = NULL,*F_outputFile = NULL;
char ach_tmp[1024];
memset(ach_tmp,'\0',1024);
if(NULL == (F_inputFile = fopen("d:\\input.txt","rt")))
{
printf("open file error\n");
}
if(NULL ==(F_outputFile = fopen("d:\\output.txt","wta+")))
{
printf("create a file error\n");
}
list<string> list1;
while(NULL!=fgets(ach_tmp,1024,F_inputFile))
{
list1.push_back(ach_tmp);
}
list1.sort(greater2( ));
fclose(F_inputFile);
for (list<string>::iterator it = list1.begin(); it != list1.end(); it++)
{
fputs((*it).c_str(),F_outputFile);
}
fclose(F_outputFile);
}







jsjjms 2005-07-19
  • 打赏
  • 举报
回复
程序中用下面的函数比较会方便一点

函数名: strncmpi
功 能: 将一个串中的一部分与另一个串比较, 不管大小写
用 法: int strncmpi(char *str1, char *str2, unsigned maxlen);
pure_flame 2005-07-19
  • 打赏
  • 举报
回复
F_outputFile=fopen("output.txt","rt+");
fopen函数接受两个参数.另外打开文件使用相对路径即可.
还缺少头文件#include <string.h>
Hercules1982 2005-07-19
  • 打赏
  • 举报
回复
谢谢了啊!我估计是 F_outputFile=fopen("c:\\output.txt","rt+"); //,F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,i_switch*1024L,0);
i_switch++;
出错了,而且 if(1==i_flag)
{
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("1%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
strcpy(ach_swap,ach_cmp);
}
始终没有执行!
jixingzhong 2005-07-19
  • 打赏
  • 举报
回复
程序修改好了

输出在当前目录下面:

你的i_flag明显用的不对!!!循环都没有执行!!

我给你改了,程序又结果了,但是顺序好象还又问题!

你的标志i_flag怎么没有变化??


#include <stdio.h>
#include<stdlib.h>

int main()
{
FILE *F_inputFile,*F_outputFile;
char ach_tmp[1024],ach_cmp[1024],ach_swap[1024];
int i_cmp=1,i_switch=1,i_flag=0,i_first=0;
F_inputFile = NULL;
F_outputFile = NULL;
memset(ach_tmp,'\0',1024);
memset(ach_cmp,'\0',1024);
if(NULL == (F_inputFile = fopen("input.txt","rt")))
{
printf("open file error\n");
}
if(NULL ==(F_outputFile = fopen("output.txt","wt")))
{
printf("create a file error\n");
}
while(NULL!=fgets(ach_tmp,1024,F_inputFile))
{
i_cmp=1,i_switch=1,i_flag=1;
if(NULL==(F_outputFile=freopen("output.txt","rt",F_outputFile)))
{
printf("reopen file error\n");
}
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(strcmp(ach_tmp,ach_cmp)<0)
{
break;
}
i_cmp++;
}
strcpy(ach_swap,ach_tmp);
fclose(F_outputFile);
F_outputFile=fopen("output.txt","rt+");
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(1==i_flag)
{
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("1%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
strcpy(ach_swap,ach_cmp);
}
if(i_cmp==i_switch)
{
strcpy(ach_swap,ach_cmp);
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("2%s\n",ach_tmp);
fputs(ach_tmp,F_outputFile);
i_flag=1;
}
memset(ach_cmp,'\0',1024);
fclose(F_outputFile);
F_outputFile=fopen("output.txt","rt+");
rewind(F_outputFile);
fseek(F_outputFile,i_switch*1024L,0);
i_switch++;
}
if(NULL==fgets(ach_cmp,1024,F_outputFile))
{
/*fclose(F_outputFile); */
F_outputFile=freopen("output.txt","at+",F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,0L,2);
printf("3%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
fclose(F_outputFile);
memset(ach_cmp,'\0',1024);
}
memset(ach_tmp,'\0',1024);
}
fclose(F_inputFile);
}
jsjjms 2005-07-19
  • 打赏
  • 举报
回复
// 下面的代码可以运行了。算法待会继续帮你修改。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *F_inputFile,*F_outputFile;
char ach_tmp[1024],ach_cmp[1024],ach_swap[1024];
int i_cmp=1,i_switch=1,i_flag=0,i_first=0;
F_inputFile = NULL;
F_outputFile = NULL;
memset(ach_tmp,'\0',1024);
memset(ach_cmp,'\0',1024);
if(NULL == (F_inputFile = fopen("c:\\input.txt","rt")))
{
printf("open file error\n");
}
if(NULL ==(F_outputFile = fopen("c:\\output.txt","wt")))
{
printf("create a file error\n");
}
while(NULL!=fgets(ach_tmp,1024,F_inputFile))
{
i_cmp=1,i_switch=1,i_flag=0;
if(NULL==(F_outputFile=fopen("c:\\output.txt","rt"))) //,F_outputFile)))
{
printf("reopen file error\n");
}
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(strcmp(ach_tmp,ach_cmp)<0)
{
break;
}
i_cmp++;
}
strcpy(ach_swap,ach_tmp);
fclose(F_outputFile);
F_outputFile=fopen("c:\\output.txt","rt+");//,F_outputFile);
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(1==i_flag)
{
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("1%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
strcpy(ach_swap,ach_cmp);
}
if(i_cmp==i_switch)
{
strcpy(ach_swap,ach_cmp);
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("2%s\n",ach_tmp);
fputs(ach_tmp,F_outputFile);
i_flag=1;
}
memset(ach_cmp,'\0',1024);
fclose(F_outputFile);
F_outputFile=fopen("c:\\output.txt","rt+"); //,F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,i_switch*1024L,0);
i_switch++;
}
if(NULL==fgets(ach_cmp,1024,F_outputFile))
{
//fclose(F_outputFile);
F_outputFile=freopen("c:\\output.txt","at+",F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,0L,2);
printf("3%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
fclose(F_outputFile);
memset(ach_cmp,'\0',1024);
}
memset(ach_tmp,'\0',1024);
}
fclose(F_inputFile);
}
jixingzhong 2005-07-19
  • 打赏
  • 举报
回复
晕!!


排序那个自己修改一下啊,

那么长的代码,

要我们改其中的算法,

还不晕过去啊!

你又没有在程序中注释!

很累的 !!!
Hercules1982 2005-07-19
  • 打赏
  • 举报
回复
设了,调试过好多次,也没想明白,但是明明内存中有,但在输出文件中没有!
Hercules1982 2005-07-19
  • 打赏
  • 举报
回复
还是不行啊,那只是相对路径问题,不影响的,排序还是不对,我这个程序编译没有错误的 !
zjxiaoyu 2005-07-19
  • 打赏
  • 举报
回复
这些东西很简单的嘛。
首先编译过了。
然后拿VC设断点,一步一步看就行了嘛!
CSDNWW 2005-07-19
  • 打赏
  • 举报
回复
楼主, 你的程序编译都一大堆错, 先别谈结果先~~~~~~
Hercules1982 2005-07-19
  • 打赏
  • 举报
回复
还是不行,要求用C,楼上那位C++的先谢谢了!!
antijpn 2005-07-18
  • 打赏
  • 举报
回复
现在人都超猛么,内部排序都不玩了,都在外部排序了……
jixingzhong 2005-07-18
  • 打赏
  • 举报
回复
上面的程序能够运行了


你用的函数fopen(),freopen()参数是不一样的

你看看修改以后的程序


\\output.txt 表示文件产生到根目录下

或者你就不要斜杠,

表示再当前目录下生成文件!!
jixingzhong 2005-07-18
  • 打赏
  • 举报
回复
#include <stdio.h>
#include<stdlib.h>

int main()
{
FILE *F_inputFile,*F_outputFile;
char ach_tmp[1024],ach_cmp[1024],ach_swap[1024];
int i_cmp=1,i_switch=1,i_flag=0,i_first=0;
F_inputFile = NULL;
F_outputFile = NULL;
memset(ach_tmp,'\0',1024);
memset(ach_cmp,'\0',1024);
if(NULL == (F_inputFile = fopen("\\input.txt","rt")))
{
printf("open file error\n");
}
if(NULL ==(F_outputFile = fopen("\\output.txt","wt")))
{
printf("create a file error\n");
}
while(NULL!=fgets(ach_tmp,1024,F_inputFile))
{
i_cmp=1,i_switch=1,i_flag=0;
if(NULL==(F_outputFile=fopen("\\output.txt","rt")))
{
printf("reopen file error\n");
}
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(strcmp(ach_tmp,ach_cmp)<0)
{
break;
}
i_cmp++;
}
strcpy(ach_swap,ach_tmp);
fclose(F_outputFile);
F_outputFile=fopen("\\output.txt","rt+");
rewind(F_outputFile);
while(NULL!=fgets(ach_cmp,1024,F_outputFile))
{
if(1==i_flag)
{
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("1%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
strcpy(ach_swap,ach_cmp);
}
if(i_cmp==i_switch)
{
strcpy(ach_swap,ach_cmp);
rewind(F_outputFile);
fseek(F_outputFile,(i_switch-1)*1024L,0);
printf("2%s\n",ach_tmp);
fputs(ach_tmp,F_outputFile);
i_flag=1;
}
memset(ach_cmp,'\0',1024);
fclose(F_outputFile);
F_outputFile=fopen("\\output.txt","rt+");
rewind(F_outputFile);
fseek(F_outputFile,i_switch*1024L,0);
i_switch++;
}
if(NULL==fgets(ach_cmp,1024,F_outputFile))
{
/*fclose(F_outputFile); */
F_outputFile=freopen("\\output.txt","at+",F_outputFile);
rewind(F_outputFile);
fseek(F_outputFile,0L,2);
printf("3%s\n",ach_swap);
fputs(ach_swap,F_outputFile);
fclose(F_outputFile);
memset(ach_cmp,'\0',1024);
}
memset(ach_tmp,'\0',1024);
}
fclose(F_inputFile);
}
jixingzhong 2005-07-18
  • 打赏
  • 举报
回复
把路径中的'\'换成'\\' ,


只有一个的话,


程序会认为是转义字符标志!!


\\本身也是转义字符,


就是输出的\ 。
boxban 2005-07-18
  • 打赏
  • 举报
回复
把路径中的'\'换成'/'先!
Hercules1982 2005-07-18
  • 打赏
  • 举报
回复
C高手请帮忙找一下错误!!感谢!!
加载更多回复(1)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧