标题:求助一道C语言问题 求改错
只看楼主
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
结帖率:100%
已结贴  问题点数:20 回复次数:11 
求助一道C语言问题 求改错
【问题描述】
写一程序将一个文件fcopy.in拷贝至另一个文件fcopy.out, 其中在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符, 其它字符不变。
【输入形式】
源文件名和目标文件名分别为fcopy.in和fcopy.out,程序将从当前目录下读取fcopy.in文件。
【输出形式】
将fcopy.in文件内容拷贝至当前目录下的fcopy.out文件中。在所拷贝的文件中, 多个连续空白符(包括空格符、制表符)只拷贝一个空格符,若非空白符之间有一个制表符,则该制表符也要替换为空格符,其它字符不变。
【输入样例】
假如文件fcopy.in中内容如下:
Alcatel        provides end-to-end solutions.
【输出样例】
输出文件fcopy.out中内容为:
Alcatel provides end-to-end solutions.
【样例说明】
将文件fcopy.in拷贝到fcopy.out,同时做适当的转换。
空格的做好了 制表符的测试不通过
程序代码:
#include<stdio.h>
#define NONBLANK 'a'
void main()
{
    FILE *fp,*fp1;
    int c,lastc;
    fp=fopen("fcopy.in","r");
    fp1=fopen("fcopy.out","w");
    lastc=NONBLANK;
    while((c=fgetc(fp))!=EOF)
    {
        if(c!=' '||c!='\t')
            fputc(c,fp1);
        if(c==' '||c=='\t')
            if(lastc!=' '||lastc!='\t')
                fputc(c,fp1);
            lastc=c;
    }
    fclose(fp);
    fclose(fp1);
}
搜索更多相关主题的帖子: 源文件 制表符 C语言 
2011-04-13 22:58
boxinchao
Rank: 4
等 级:业余侠客
帖 子:51
专家分:231
注 册:2011-4-13
得分:7 
做了简单修改,没有调试过,仅供参考
程序代码:
#include<stdio.h>
#define NONBLANK 'a'

void main()
{
    FILE *fp,*fp1;
    int c,lastc;
    fp=fopen("fcopy.in","r");
    fp1=fopen("fcopy.out","w");
    lastc=NONBLANK;

    while((c=fgetc(fp))!=EOF)
    {
        if((' ' != c) && ('\t' != c))
        {
            fputc(c,fp1);
        }
        else
        {
            if((' ' != lastc) && ('\t' != lastc))
            {
                 fputc(c,fp1);
            }
        }
                   
        lastc=c;

        fclose(fp);
        fclose(fp1);
    }
}


2011-04-13 23:41
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 2楼 boxinchao
这个还是有问题啊 没有通过
2011-04-13 23:49
boxinchao
Rank: 4
等 级:业余侠客
帖 子:51
专家分:231
注 册:2011-4-13
得分:0 
是什么问题呢?
貌似我把 fclose(fp);和fclose(fp1);扩到while(1)中去了,抱歉..

还有,代码中没有对指针进行++操作,考虑下是否需要。
对文件操作我不太懂,没搞过
2011-04-13 23:58
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 4楼 boxinchao
好吧 我也是刚学习 也不太懂 坐等高手啊
2011-04-13 23:59
boxinchao
Rank: 4
等 级:业余侠客
帖 子:51
专家分:231
注 册:2011-4-13
得分:0 
回复 3楼 Romantic8121
你说的没通过总有个结果吧?调试下看看是什么问题啊
2011-04-14 00:13
wsdillon
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2011-4-14
得分:7 
#include<stdio.h>
#define NONBLANK 'a'
void main()
{
    FILE *fp,*fp1;
    int c,lastc;
    fp=fopen("fcopy.in","r");
    fp1=fopen("fcopy.out","w");
    lastc=NONBLANK;
    while((c=fgetc(fp))!=EOF)
    {
        if(c!=' '||c!='\t')
            fputc(c,fp1);
        if(c==' ')
        {
            if(lastc!=' '&&lastc!='\t')
            {     
                fputc(c,fp1);
                lastc=c;
             }
        }
        else{
            if(c=='\t')
            {
                if(lastc!=' '&&lastc!='\t')
                {
                    lastc=' ';
                    fputc(lastc,fp1);
                    lastc=c;
                }
             }
        }
    }
    fclose(fp);
    fclose(fp1);
}

2011-04-14 10:55
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
回复 7楼 wsdillon
错误输出:
Alcatel              provides    end-to-end solutions.
期望输出:
Alcatel provides end-to-end solutions.
2011-04-14 12:52
Romantic8121
Rank: 2
等 级:论坛游民
帖 子:50
专家分:21
注 册:2011-4-11
得分:0 
没有人回答了么
2011-04-14 14:55
绯苍幻想曲
Rank: 2
等 级:论坛游民
帖 子:34
专家分:49
注 册:2010-11-29
得分:7 
程序代码:
#include<stdio.h>
#include<stdlib.h>
void main()
{
    FILE *fp1,*fp2;
    char c,lastc='a';
    if((fp1=fopen("fcopy.in","r"))==NULL)puts("error"),exit(1);
    if((fp2=fopen("fcopy.out","w"))==NULL)puts("error"),exit(1);
    for(;fread(&c,sizeof(char),1,fp1)==1;)
    {
        if(lastc!=' '&&lastc!='\t')fputc(c,fp2);
        lastc=c;
    }
    puts("OK!");
}
VC6编译通过,并且测试无错误
2011-04-14 22:03



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




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

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