| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3973 人关注过本帖
标题:用c语言比较两个txt文件是否一致(不分大小写)
只看楼主 加入收藏
吕重义
Rank: 1
来 自:吉林长春
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:11 
用c语言比较两个txt文件是否一致(不分大小写)
设计思路是先读取两个txt文件的内容,然后都变成大写,再逐个比较。结果在第二个文件读取的地方出现问题,第一个文件读取到的数据就是无法保存,总是被第二个文件覆盖。
谁能帮帮我,是设计思路的问题,还是编程中有错误?本人小白,初学C语言,求大神帮助!
文件名字都是由键盘输入的,程序最后输出返回值,一致为1,不一致为0。

#include <stdio.h>

void str_toupper(char str[])
{
    unsigned i=0;
    while(str[i]){
    str[i]=toupper(str[i]);
    i++;
    }
}
int stricomp(const char str1[],const char str2[])
{
    int n,x=0;
    for(n=0;n<3;n++){
    x=0;
    if(str1[n]==str2[n])x=1;
    else if(str1[n]!=str2[n])break;
    }
    return(x);
}
int main(void)
{
int n;
char str1[]={0};
char str2[]={0};
FILE *fp;
char fname[255];
puts("输入文件1的名字:");
scanf("%s",fname);
fp=fopen(fname,"r");
if(fp==NULL)
    puts("ファイルをオープンできません。");
for(n=0;str1[n-1]!=EOF;n++){
str1[n]=fgetc(fp);
}
fclose(fp);
puts("输入文件2的名字:");
scanf("%s",fname);
fp=fopen(fname,"r");
if(fp==NULL)
    puts("ファイルをオープンできません。");
for(n=0;str2[n-1]!=EOF;n++){
str2[n]=fgetc(fp);
}
fclose(fp);

str_toupper(str1);
str_toupper(str2);
printf("%d\n",stricomp(str1,str2));

return(0);
}
搜索更多相关主题的帖子: include C语言 
2012-12-18 16:46
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:10 
哥们,你的代码真让人蛋疼啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-18 17:00
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:10 
main函数开始你的n就有问题 n的值呢 就直接for了

Go Go Go
2012-12-18 17:04
吕重义
Rank: 1
来 自:吉林长春
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-18
收藏
得分:0 
回复 2楼 yaobao
表示纯新手,真的不太会,写了一下午写成这样还有错误感觉要崩溃了.......
当初把读取两个文件拆开来分别试都好使,就是放在一起不知道为什么就是得不出结果......
2012-12-18 17:06
吕重义
Rank: 1
来 自:吉林长春
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-18
收藏
得分:0 
回复 3楼 zhaoya881010
for不是可以赋值嘛,所有的n都放在for里面第一句n等于0了。
2012-12-18 17:09
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
str1[n-1],初始值为0 你再减去1呢 str1[-1]这什么意思?

Go Go Go
2012-12-18 17:13
吕重义
Rank: 1
来 自:吉林长春
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-18
收藏
得分:0 
回复 6楼 zhaoya881010
刚开始没有-1,结果正确只不过后面出现好多乱码,后来我试了一下-1,结果不仅没错,乱码也少了好多.....于是就一直-1了....研究了好半天也没研究出为什么,系统bug?还是系统自动忽略str【-1】,就不清楚。感觉应该是系统随机赋值,正好可以满足某个条件.......
2012-12-18 17:21
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
程序代码:
   #include <stdio.h>
   #include<ctype.h>
void str_toupper(char str[])
{
    int i=0;
    while(str[i]){
    str[i]=toupper(str[i]);
    i++;
    }
}
int stricomp(const char str1[],const char str2[])
{
    int n;
    for(n=0;n<1000&&str1[n]!='\0'&&str2[n]!='\0';n++)
      if(str1[n]!=str2[n])return 0;
    return 1;
}
int main(void)
{
int n=0;
char str1[1000]={'\0'};
char str2[1000]={'\0'};
FILE *fp,*fp1;
char fname[255]={'\0'};
char fname1[255]={'\0'};
puts("enter num 1:");
fflush(stdin);
scanf("%s",fname);
if((fp=fopen(fname,"r"))==NULL){
    puts("buxing");exit(0);}

 fp1=fp;
fgets(str1,strlen(fp1),fp);
fclose(fp);
puts("enter num 2:");
scanf("%s",fname1);
if((fp=fopen(fname,"r")==NULL)){
    puts("buxing ");exit(0);}

 fp1=fp;
fgets(str2,strlen(fp1),fp);
fclose(fp);
str_toupper(str1);
str_toupper(str2);
printf("%d\n",stricomp(str1,str2));

return 0;
}
哥们,这是我写的,就当个参考吧,我也没编译,着急有事要出去一趟。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-18 17:22
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
你直接n好了嘛 干嘛要减去1嘛 函数mian里面不要太长50差不多了 封装新函数嘛,所有的变量必须要初始化 内存的泄漏 野指针 随机值 会给你带来致命伤害的。

Go Go Go
2012-12-18 17:27
吕重义
Rank: 1
来 自:吉林长春
等 级:新手上路
帖 子:6
专家分:0
注 册:2012-12-18
收藏
得分:0 
回复 8楼 yaobao
谢谢了,我拿去研究一下,不懂的问你可以么?
2012-12-18 17:31
快速回复:用c语言比较两个txt文件是否一致(不分大小写)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031524 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved