| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3304 人关注过本帖
标题:文件读写错误!
取消只看楼主 加入收藏
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
文件读写错误!
程序代码:
/*
有两个磁盘文件“A”和“B”,各存放一行字母,今要求把这两个文件中的信息
合并(按字母顺序排列),输出到一个新文件“C”中去。
*/
/*
思路:
1、建立两个可读写文件file1、file2,将str1、str2字符串分别读入到file1,file2;
2、将file1,file2中的字符串写入到str3,在str3中对字符串进行排序;
3、将str3字符串按字符依次写入到file3并输出。
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
void main()
{
    FILE *fp1,*fp2,*fp3;
    char str1[20],str2[20],str3[40],temp;
    unsigned int i,j;
    if((fp1=fopen("file1.txt","w"))==NULL)
    {
        printf("Can not find the file!\n");
        getchar();
        exit(0);
    }
    if((fp2=fopen("file2.txt","w"))==NULL)
    {
        printf("Can not find the file!\n");
        getchar();
        exit(0);
    }
    if((fp3=fopen("file3.txt","w"))==NULL)
    {
        printf("Can not find the file!\n");
        getchar();
        exit(0);
    }
    fclose(fp1);
    fclose(fp2);
    printf("input string1:");
    gets(str1);
    printf("input string2:");
    gets(str2);
    fputs(str1,fp1); //将str1字符串写入到fp1;
    fputs(str2,fp2); //将str2字符串写入到fp2;
    //以上测试正常,fp1,fp2已被写入数据

    fp1=fopen("D:\\VC\\第十章-文件\\file1.txt","r");
    fp2=fopen("D:\\VC\\第十章-文件\\file2.txt","r");
    fgets(str3,strlen(str1),fp1);//将fp1的字符串读入到str3;
    fgets(str3,strlen(str2),fp2);//将fp2的字符串读入到str3;

    /*以下测试str3是否读取到数据*/
    puts(str3);
    getchar();
    /*测试错误:烫烫烫+str2字符串,str3未成功读取数据。对"fp1/fp2"进行rewind也没用*/


    /*对str3字符串排序*/
    for(i=0;i<strlen(str1)+strlen(str2);i++)
        for(j=i+1;j<strlen(str1)+strlen(str2);j++)
            if(str3[i]>str3[j])
            {
                temp=str3[i];
                str3[i]=str3[j];
                str3[j]=temp;
            }


      /*将str3字符串写入到fp3*/
    for(i=0;i<strlen(str1)+strlen(str2);i++)
    {
        fputc(str3[i],fp3);
        putchar(str3[i]);
    }
}

//目前主要问题是str3未读取到数据。


[ 本帖最后由 a4811 于 2013-1-8 16:22 编辑 ]
搜索更多相关主题的帖子: 字符串 字母 
2013-01-08 14:50
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 2楼 yaobao
fp1/fp2不是文件指针吗?
还请bao哥细说。
2013-01-08 15:10
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 4楼 yaobao
    fp1=fopen("D:\\VC\\第十章-文件\\file1.txt","w+");
    fp2=fopen("D:\\VC\\第十章-文件\\file2.txt","w+");
    fgets(str3,strlen(str1),fp1);//将fp1的字符串读入到str3;
    fgets(str3,strlen(str2),fp2);//将fp2的字符串读入到str3;
你的意思是不是要这样。
我真搞不懂哪里错了,bao哥,你就直接指出撒,怎么改,哪里有错。
fp1、fp2在上面已经定义了是文件指针,还要怎么说它不是文件指针。
2013-01-08 15:52
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 7楼 yaobao
嗯,用rewind函数也可以。
但当我在前面建立的是只写文件时,只有输入两个等长的字符串运行才正确,不等长就错误。这是啥原因?
程序代码:
/*
有两个磁盘文件“A”和“B”,各存放一行字母,今要求把这两个文件中的信息
合并(按字母顺序排列),输出到一个新文件“C”中去。
*/
/*
思路:
1、建立三个文件file1、file2、file3,将str1、str2字符串分别写入到file1,file2;
2、将file1,file2中的字符串读入到str3,在str3中对字符串进行排序;
3、将str3字符串按字符依次写入到file3并输出。
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
void main()
{
    FILE *fp1,*fp2,*fp3;
    char str1[20],str2[20],str3[40],temp;
    unsigned int i,j;
    if((fp1=fopen("file1.txt","w"))==NULL)
    {
        printf("Can not find the file!\n");
        getchar();
        exit(0);
    }
    if((fp2=fopen("file2.txt","w"))==NULL)
    {
        printf("Can not find the file!\n");
        getchar();
        exit(0);
    }
    if((fp3=fopen("file3.txt","w"))==NULL)
    {
        printf("Can not find the file!\n");
        getchar();
        exit(0);
    }
    printf("input string1:");
    gets(str1);
    printf("input string2:");
    gets(str2);
    fputs(str1,fp1); //将str1字符串写入到fp1;
    fputs(str2,fp2); //将str2字符串写入到fp2;
    //以上测试正常,fp1,fp2已被写入数据
    fclose(fp1);
    fclose(fp2);
    fp1=fopen("file1.txt","r");
    fp2=fopen("file2.txt","r");
    rewind(fp1);
    rewind(fp2);
    fgets(str3,strlen(str1)+1,fp1);             //将fp1的字符串读入到str3;
    fgets(str3+strlen(str2),strlen(str2)+1,fp2);//将fp2的字符串读入到str3;
    /*以下测试是否写入str3、*/
    puts(str3);
    getchar();
    /*测试错误:当输入的两个字符串等长时运行正确,输入不等长字符串运行错误*/

    /*对str3字符串排序*/
    for(i=0;i<strlen(str1)+strlen(str2);i++)
        for(j=i+1;j<strlen(str1)+strlen(str2);j++)
            if(str3[i]>str3[j])
            {
                temp=str3[i];
                str3[i]=str3[j];
                str3[j]=temp;
            }
      /*将str3字符串写入到fp3*/
    for(i=0;i<strlen(str1)+strlen(str2);i++)
    {
        fputc(str3[i],fp3);
        putchar(str3[i]);
    }
    fclose(fp1);
    fclose(fp2);
    fclose(fp3);
    printf("\n");
}
/*
最前面建立的是只写文件,不是可读写文件。
问题:
当输入的两个字符串等长时运行正确,输入不等长字符串运行错误。
*/



2013-01-08 20:40
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 9楼 yaobao
懂了,bao哥。rewind和fseek,是改变文件位置标记。
在关闭文件之后,再打开它,文件位置标记已在开头,无需改变;若没关闭,文件位置标记在末尾,需用rewind和fseek函数改变它。
至于那个strlen1写成strlen2纯属粗心。
2013-01-08 22:21
快速回复:文件读写错误!
数据加载中...
 
   



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

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