标题:关于fopen一系列的函数和指针搞不懂
只看楼主
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
结帖率:91.43%
已结贴  问题点数:20 回复次数:8 
关于fopen一系列的函数和指针搞不懂
我读一个txt文件,然后按照定义的change算法来文件进行修改再在屏幕上输出,但是输出总是乱七八糟的东西,然后提示停止工作
change只有for循环是对的,其余的我不清楚哪里不对

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
    long int n;
    void change (FILE* m,long int num);   
    FILE *read;
    read=fopen("data_v.txt","r");
    fseek(read,0,SEEK_SET);
    fseek(read,0,SEEK_END);
    n=ftell(read);
    if (read==NULL)
    {
        printf("can't open this file\n ");
        exit(0);
    }
    change(read,n);
    fclose(read);
    return 0;
}
void change (FILE* m,long int num)
    //a=97 A=65 z=122 Z=90
{
    char x[5]={'h','e','l','l','o'};
    char *f=(char *)malloc(num);
    int i,j,l;
    fread(f,1,num,m);
    for (i=0;i<5;i++)
    {
        x[i]=x[i]-97;
    }
    for (i=0;i<num;i++)
    {
        if(f[i]<97)
            f[i]=f[i]-65;
        else
            f[i]=f[i]-97;
    }
    for (i=0;i<num;i++)
    {
        if (f[i]>=0)
            f[i]=(f[i]+x[i%5])%26+65;
        else
            f[i]=f[i]+65;
        printf("%c",m[i]);
    }
}
搜索更多相关主题的帖子: long include change file 
2013-05-13 15:51
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
得分:15 
n=ftell(read);
rewind(read);


printf("%c",m[i]);

printf("%c",f[i]);
收到的鲜花
  • lyl9301302013-05-14 22:28 送鲜花  3朵  
2013-05-13 16:12
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 2楼 Ryker
谢谢,改过来了。

我还想问一下     fseek(read,0,SEEK_END);以后是不是指向的整个文件的尾部?

只改了printf("%c",m[i]);
      printf("%c",f[i]);  没加rewind的时候输出的全是“屯”是因为没有赋值,全改过来最后的输出还是有五六十来个字符的“屯”。
如果说是f[n]定义的长度超过的话,应该只有一两个字符的“屯”吧,为什么会有这么多个?
而且最后还没有把数据跑完就出现“屯”了
2013-05-13 17:43
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 2楼 Ryker
不对。。不好意思,又弄错了。。
我又重新查了一下输出,最后面是多了一段输出,除了五六十个“屯”以为还多输出了近2段(大概500个英文字符),不知道是为什么
2013-05-13 17:52
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
void change (FILE* m,long int num)
    //a=97 A=65 z=122 Z=90
{
    char x[5]={'h','e','l','l','o'};
    char *f=(char *)malloc(num);
    int i,j,l;
    FILE *out;
    fread(f,1,num,m);
    for (i=0;i<5;i++)
    {
        x[i]=x[i]-97;
    }
    for (i=0;i<num;i++)
    {
        if(f[i]<97)
            f[i]=f[i]-65;
        else
            f[i]=f[i]-97;
    }
    for (i=0;i<num;i++)
    {
        if (f[i]>=0)
            f[i]=(f[i]+x[i%5])%26+65;
        else
            f[i]=f[i]+65;
        //printf("%c",m[i]);
    }
        out=fopen("result_v.txt","wb");
    fwrite(f,num,1,out);
    free(f);
    fclose(out);

}
我把输出改成了写入一个文件,但是写入的文件不像在屏幕上直接输出那样有换行,这是为什么啊?
2013-05-13 18:40
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
得分:0 
一楼的代码我试了一下.没有乱码,可能和我建的文件短有关系..只有十来个字母

我也是刚学到文件这里,fwrite是以二进制方式写入的吧,没有换行符的

fwrite我还没怎么搞明白,今天做了一个题,用fputs写入,最后还是用putc续上换行符..
2013-05-13 20:03
lyl930130
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:323
专家分:111
注 册:2013-5-13
得分:0 
回复 6楼 Ryker
那有没有办法写入文件的时候把换行符也写进去呢?
2013-05-14 12:53
爱吗
Rank: 1
等 级:新手上路
帖 子:4
专家分:6
注 册:2013-5-14
得分:5 
出现屯 这个字符大概是因为系统找不到\O 也就是字符串结束符
收到的鲜花
  • lyl9301302013-05-14 22:28 送鲜花  1朵  
2013-05-14 13:23
爱吗
Rank: 1
等 级:新手上路
帖 子:4
专家分:6
注 册:2013-5-14
得分:0 
而且注意你的编程环境,好像系统输出的是UNICODE
2013-05-14 13:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-406971-1-1.html




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

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