奇葩C语言问题。。。不能正常比较。。一直大于。。循环即便又出现等于。。接着就溢出了
#include<stdio.h>#include<process.h>
#include<string.h>
#define true 0;
#define false -1;
#define filehmax 101//支持最大的文件行数.需要比文件行数大1
#define strmaxl 15//字符串最大长度
//全局变量区
char CO[filehmax][strmaxl];
char *TP;//TP是temp的意思
int ag;
//字符串互换函数。采用指针自增 来源百度。
void swapstr(char *str1,char *str2)
{
char str[strmaxl];
char *p=str,*p1=str1,*p2=str2;
while((*p++=*p1++)!=NULL);
p=str,p1=str1;
while((*p1++=*p2++)!=NULL);
p2=str2;
while((*p2++=*p++)!=NULL);
}
int main (void)
{
//功能变量区
FILE *file; //文件指针
int fileh; //文件行数
//临时变量区
char a;
int i,j;
int li,lj,lk;
//打开文件
restart:
system("cls");
printf(" 本程序将从1.txt文件中读取数据,并进行处理。\n 文件最多:%d行\n单行字符个数最大为:%d\n 注意:程序有BUG。。最后一行不要为单独的回车。不然最后一个读出的数据会为乱码 ",filehmax,strmaxl);
getchar();
file=fopen("1.txt","r");
if(file==NULL)
{
printf("文件1.txt打开失败!请确定文件是否存在。");
getchar();
goto restart;
} else{
printf("文件1.txt成功打开。\n");
getchar();
}
//得出文件行数,判断是否能处理
fileh=0;
while((a=fgetc(file))!=EOF)
{
if(a=='\n')
{
fileh++;
}
}
fileh++;
//判断是否能进行操作
if(fileh<(filehmax+1))
{
printf("文件行数为:%d 在最大行数(%d)之内 可以进行操作!",fileh,filehmax);
getchar();
goto begin;
} else {
printf("文件行数为:%d 大于最大行数:%d 不能进行操作!",fileh,filehmax);
getchar();
goto restart;
}
begin:
//统计完文件行数后。。文件指针指向末尾。需要指向文件开头。
fseek(file,0,SEEK_SET);
//开始录入数据
for (i=1;i<(fileh+1);i++)
{
fgets(CO[i],100,file);
printf("刚刚读取%d行。数据为:%s",i,CO[i]);
}
getchar();
//**************************************
/*出错的就是下面这一段。。不能正常比较,一直是大于。。但是循环几遍的过程中出现了相等。。然后就内存溢出了。
*/
//**************************************
a:
for(i=1;i<(fileh+1);(i=i+1))
{
printf(" %d ",i);
ag=strcmp(CO[i],CO[i+1]);
if (ag>0)
{
printf("str1大于str2的ascii码\n");
swapstr(CO[i],CO[i+1]);
} else if(ag<0)
{
printf("str1小于str2的ascii码\n");
} else if(ag==0)
{
printf("两个字符串相等\n");
}
}
getchar();
for (i=1;i<(fileh+1);i++)
{
printf("#%d ######:%s \n",i,CO[i]);
}
getchar();
goto a;
}