| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 586 人关注过本帖, 1 人收藏
标题:feof()函数判断是否读到数据末尾,为什么读不到空字符呢?读不到,那为什么 ...
取消只看楼主 加入收藏
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
结帖率:66.67%
收藏(1)
 问题点数:0 回复次数:4 
feof()函数判断是否读到数据末尾,为什么读不到空字符呢?读不到,那为什么读的字符总长度是字符串长度加1呢?详见代码,还有问题,求帮忙。
/*打开一个现有文本文件,将所有的小写字母转换为大写,然后将其拷贝至新的文本文件中。*/
#include <stdio.h>
#include <stdlib.h>

void copy_file(char old[],char new[]);

FILE *fold,*fnew;

int main(void)
{
    char buf[40];
    char newname[10];
    int count=0,a=0;
    char ch;

    if((fold=fopen("a.txt","r"))==NULL)
    {
        fprintf(stderr,"Error opening file.");
        exit(-1);
    }
    rewind(fold);

    while(1)
    {
        if(!feof(fold))
        {
            if((ch=fgetc(fold))=="\0")     //防止空字符进行-32的转换,,但是为什么读取不到?  
                break;
            else
                buf[count++]=ch-32;
                a++;                    //a为对读到的字符计数。
        }
        else
            break;
    }
    fclose(fold);
    a-=1;                        //去除空字符
    for(count=0;count<a;count++)
    {
        printf("\nbuf[count]=%c",buf[count]);
    }

    printf("\nEnter newname...");
    gets(newname);

    copy_file(buf,newname);

    getchar();
    return 0;
}

void copy_file(char old[],char new[])
{
    if((fnew=fopen(new,"w"))==NULL)
    {
         fprintf(stderr,"Error opening file.");
         exit(-1);
    }
    fputs(old,fnew);

    fclose(fnew);
}
在程序下建一个记事本文件输入abcdehahaha;但程序运行结果是在另一个文件中存入了ABCDEHAHAHA?bw腫w?@
是在是不懂,请高手帮助。
2015-09-17 20:18
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 TonyDeng
比如说读取abcde的长度用feof()这样读:
while(1)
     {
         if(!feof(fold))
         {
            a++;
         }
最后的a值为6,所以说应该会读字符串末尾的空字符。
2015-09-17 21:35
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 4楼 TonyDeng
哦,用feof()查看是否到数据末尾,是通过位置指示符来控制,那当位置指示符移到空字符时,feof()依然返回0;
那么这个时候为什么用ch=fgetc(fold))访问不到‘/0’?当时位置指示符还在那啊,这个有点不懂。。。
2015-09-17 21:46
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 5楼 TonyDeng
哦哦  明白了,那具体应该怎么做,来让文件正常复制过去
2015-09-17 21:48
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 8楼 TonyDeng
嗯嗯明白了 非常感谢
2015-09-17 21:53
快速回复:feof()函数判断是否读到数据末尾,为什么读不到空字符呢?读不到,那为 ...
数据加载中...
 
   



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

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