VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 711|回复: 2

文件读写的问题~~想不通~~

[复制链接]

7

主题

15

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-1-9 23:00:01 | 显示全部楼层 |阅读模式
读入两个文件(str1.txt str2.txt)中的内容(均只含一串字符),存入一数组中排序再写入一个新创建的文件(newstr.txt)中
排序,写入,都没问题,可是读入的时候,需要加 i-=1(下面有标明的~),如果不加,两次读写完后都会在末尾多出一个随即字符,比如若str1中是qwert,str2.txt中是asdfg,那么不加i-=1的话,写入的结果是:
××ADEFGQRSTW(×代表随即字符,调试时显示的是一个类似加了音标的小y)
即一开始存入数组的是QWERT×ASDFG×


#include <stdio.h>
#define NAMELEN 10
#define F_NAMELEN 10
#define STRLEN 100
#define NULL 0
void main()
{
        FILE *fp;
        int i=0,j,min,temp,length;
        char ch,allstr[STRLEN],r1[F_NAMELEN],r2[F_NAMELEN],w1[F_NAMELEN];
        printf("Input File1(str1.txt) please\n=> ");//输入要读入的第一个文件的名字
        scanf("%s",r1);
        if ((fp=fopen(r1,"r"))==NULL)
        {
                printf("File open failed\n");
                exit(0);
        }
        while(!feof(fp))
                allstr[i++]=fgetc(fp);
        i-=1;//不加的话,末尾会多一个随机字符,为什么?是判断条件不对吗?
        printf("Input File2(str2.txt) please\n=> ");//输入要读入的第二个文件的名字
        scanf("%s",r2);
        if ((fp=fopen(r2,"r"))==NULL)
        {
                printf("File open failed\n");
                exit(0);
        }
        while(!feof(fp))
                allstr[i++]=fgetc(fp);//将文件中的字符存入数组,进行排序
        allstr[i-1]='\0';//这里也必须用i-1
        length=strlen(allstr);
        for (i=0;i<length-1;i++)    //对字符排序
        {
                for (min=i,j=i+1;j<length;j++)
                        if (allstr[j]<allstr[min])
                                min=j;
                if (min!=i)
                {
                        temp=allstr[i];
                        allstr[i]=allstr[min];
                        allstr[min]=temp;
                }
        }
        printf("Input new file name(NewStr.txt) please\n=> ");
                                               //输入要写入的文件的名字
        scanf("%s",w1);
        if ((fp=fopen(w1,"w"))==NULL)
        {
                printf("File open failed\n");
                exit(0);
        }
        i=0;
        while(allstr[i])
                fputc(allstr[i++],fp);
        fclose(fp);
}

回复

使用道具 举报

0

主题

45

帖子

32.00

积分

新手上路

Rank: 1

积分
32.00
发表于 2020-1-11 16:45:02 | 显示全部楼层
i++是先取值然后在自增的

所以要i-1

回复

使用道具 举报

0

主题

25

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-1-13 11:18:02 | 显示全部楼层
        ch = fgetc( fp );
        for( i=0; feof( fp ) == 0; i++ )
        {
          allstr[i] = (char)ch;
          ch = fgetc( fp );
        }

        printf("Input File2(str2.txt) please\n=> ");//输入要读入的第二个文件的名字
        scanf("%s",r2);
        if ((fp=fopen(r2,"r"))==NULL)
        {
                printf("File open failed\n");
                exit(0);
        }
        ch = fgetc( fp );
        for(int ii = i; feof( fp ) == 0; ii++ )
        {
          allstr[ii] = (char)ch;
          ch = fgetc( fp );
        }

        allstr[ii]='\0';//这里也必须用i-1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表