| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 441 人关注过本帖
标题:文件复制问题,做半天都是错的,球大婶解答
只看楼主 加入收藏
yupeisx
Rank: 1
等 级:新手上路
帖 子:20
专家分:8
注 册:2012-3-7
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:7 
文件复制问题,做半天都是错的,球大婶解答
程序虽然很挫,但是凑活能看,运行后  结果数组filename1【10】  中会莫名其秒的出现个不认识的字符
  然后我 只能球大神帮助了  谢谢
#include<stdio.h>
#include<stdlib.h>
void main()
{
    FILE *fp;
    FILE *fp1;
    char ch,filename[10];
    char choose;
    scanf("%c",&choose);
    if(choose=='r')
    {
        scanf("%s",filename);
        if((fp=fopen(filename,"rt"))==NULL)
        {
            printf("cannot open this file\n");
            exit(0);
        }
        ch=getchar();
        while(!(feof(fp)))
        {
            ch=fgetc(fp);
            putchar(ch);
        }
        putchar(10);
        fclose(fp);
    }
    if(choose=='w')
    {
        scanf("%s",filename);
        if((fp=fopen(filename,"wt"))==NULL)
        {
            printf("cannot open this file\n");
            exit(0);
        }
        ch=getchar();
        ch=getchar();
        while(ch!='\n')
        {
            fputc(ch,fp);
            putchar(ch);
            ch=getchar();
        }
        putchar(10);
        fclose(fp);
    }
    if(choose=='c')
    {
        
        char a[50]={0};
        int cnt=1;
        int i;
        char filename1[10];
        char filename2[10];
        scanf("%s",filename1);
        scanf("%s",filename2);
        if((fp=fopen(filename1,"r"))==NULL)
        {
            printf("Cannot open this file");
            exit(0);
        }

            a[0]=fgetc(fp);
        while(!feof(fp))
        {
            a[cnt++]=fgetc(fp);
        }
        
        if((fp1=fopen(filename2,"w"))==NULL)
        {
            printf("Cannot open this file");
            exit(0);
        }
        for(i=0;i<cnt;i++)
        {
            ch=a[i];
            fputc(ch,fp1);
        }
        printf("%s\n",a);
        fclose(fp);
        fclose(fp1);
    }
}
搜索更多相关主题的帖子: void include cannot file 
2012-03-07 17:31
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
for(i=0;i<cnt;i++)
改成for(i=0;i<cnt-1;i++)

梅尚程荀
马谭杨奚







                                                       
2012-03-07 17:49
yupeisx
Rank: 1
等 级:新手上路
帖 子:20
专家分:8
注 册:2012-3-7
收藏
得分:0 
回复 楼主 yupeisx
您好,谢谢您的答案,但是
if(choose=='c')
    {
        
        char a[50]={0};
        int cnt=1;
        int i;
        char filename1[10];
        char filename2[10];
        scanf("%s",filename1);
        scanf("%s",filename2);
        if((fp=fopen(filename1,"r"))==NULL)
        {
            printf("Cannot open this file");
            exit(0);
        }

            a[0]=fgetc(fp);
        while(!feof(fp))
        {
            a[cnt++]=fgetc(fp);
        }
        
        if((fp1=fopen(filename2,"w"))==NULL)
        {
            printf("Cannot open this file");
            exit(0);
        }
        for(i=0;i<cnt;i++)
        {
            ch=a[i];
            fputc(ch,fp1);
        }
        printf("%s\n",a);
        fclose(fp);
        fclose(fp1);
    }
我要的结果不是绿色字体说的将正确的复制过去,而是红色字体中说的,走单步时候,那个数组中的数值是不正常的。求解答谢谢
2012-03-07 18:04
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
目前还不清楚为什么在单步调试时为什么红色部分a[]显示不了内容 却能获得值

换成这样   do
        {
            a[cnt++]=fgetc(fp);
        
        }while(a[cnt - 1] != EOF);
在单步调试时a[]能显示每次获得的字符。


梅尚程荀
马谭杨奚







                                                       
2012-03-07 18:30
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
o 知道为什么了。
     a[0]=fgetc(fp);
        while(!feof(fp))
        {
            a[cnt++]=fgetc(fp);
        }
在单步调试时a[cnt]每次都显示的是a[cnt + 1]的值 而此时a[cnt + 1]还未赋值。

梅尚程荀
马谭杨奚







                                                       
2012-03-07 18:33
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:5 
单步调试时能发现a[]把结束标志当做一个字符读进去了。

梅尚程荀
马谭杨奚







                                                       
2012-03-07 18:45
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
收藏
得分:0 
大大。。。

数学好难!
2012-03-07 21:42
yupeisx
Rank: 1
等 级:新手上路
帖 子:20
专家分:8
注 册:2012-3-7
收藏
得分:0 
回复 5楼 有容就大
这就是 feof函数的弊端所在 他多读取了一个数据  但是 应该怎么更改这个问题 求解??  谢谢
2012-03-08 22:14
快速回复:文件复制问题,做半天都是错的,球大婶解答
数据加载中...
 
   



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

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