tandkzy 发表于 2007-7-19 11:54:15

想把一个文件中的空格替换成其它字符并写到新文件中去。结果不成功~~

代码如下:
#include <stdio.h>
#define max 60
#define min 3
main()
{
        int count;
        int i;
        char name;
        char extname[]="jpg";
        FILE *fp;
        FILE*fp2;
        int c;
        int zero='0';

        printf("Please input the name of the file");
        scanf("%s",name);
        printf("\n");
        printf("Please input file count");
        scanf("%d",&count);
        printf("\n");

        fp=fopen("dmtmp","wr");
        for( i = 0; i < count ; i++){
                fprintf(fp,"%s",name);
                fprintf(fp,"%3d",i);
                fprintf(fp,"%3d",i+1);
                fprintf(fp,".%s",extname);
                fprintf(fp,"\n");
        }
       
        rewind(fp);
        fp2=fopen("dmlist","w");
       
        while((c = getc(fp)) != EOF){
                if ( c == ' ')
                        putc('0',fp2);
                else
                        putc(c,fp2);
        }

        fclose(fp);
        fclose(fp2);
}
       
编译的时候用的gcc,编译没有任何问题。但是结果出来后,dmlist文件却总是空的,而tmp文件则按我预想的写满了内容。我参考了下面这段程序:
#include <stdio.h>

main(int argc, char *argv[])
{
        FILE *fp;
        void filecopy(FILE * , FILE * );

        if ( argc == 1 )
                filecopy(stdin,stdout);
        else
                while ( --argc > 0)
                       if((fp=fopen(*++argv,"r")) == NULL ){
                                printf("cat:can'topen %s\n",*argv);
                                return 1;
                        }else{
                                filecopy(fp,stdout);
                                fclose(fp);
                        }
                        return 0;
}

void filecopy(FILE *ifp, FILE *ofp)
{
        int c;

        while ((c = getc(ifp)) != EOF)
                if(c == ' ')
                        putc('0',ofp);
                else
                        putc(c,ofp);
               
}

这段程序可以正常工作~~

[ 本帖最后由 tandkzy 于 2007-7-19 11:55 编辑 ]

ppiy3670 发表于 2007-7-20 09:38:21

把这句:
    fp=fopen("dmtmp","wr");
改成:
    fp=fopen("dmtmp","a+");

问题就解决了!

tandkzy 发表于 2007-7-21 15:40:57

那个,好像不行啊,兄弟~~~

我试过了,根本什么东西都读不出来,所以后一个文件才什么也写不进去。但是如果把原来的程序拆成两个程序的话,结果就显得相当正常了。
也就是说,第一个程序只管生成dmtmp文件。等它运行完毕之后,第二个程序再处理dmtmp文件,最后生成dmlist文件。如果把这两个处理过程写到一支程式里面,结果会是根本就读不出dmtmp的内容~~~
我不知道这是为什么~~~~

loveccy 发表于 2007-7-22 10:45:39

fp=fopen("dmtmp","wr");
这句不对吧。你看看 man fopen 先,只有 r, r+, w, w+, a, a+ 这几种 mode 。你用 "wr" 是想可读可写打开这个文件,其实是只能写。

freeman1212 发表于 2007-8-28 13:45:59

把这句:
    fp=fopen("dmtmp","wr");
改成:
    fp=fopen("dmtmp","w+");
也可以。"w+"是可读,可写
"a+"是可读,可写(是追加)都可以写进去

hobby! 发表于 2007-11-29 16:41:57

不要这样,与空格为分点,分点重写一次,在过程中加入你的其它字符,可以同时用户多种区分出来,更换更多其它字符,用户if就可以了,\
所以编程,要多的要求,对问题处理的逻辑.而不是用户什么语法,逻辑出来了,语法也定下了.
页: [1]
查看完整版本: 想把一个文件中的空格替换成其它字符并写到新文件中去。结果不成功~~