| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 616 人关注过本帖
标题:T版和P版·我完成了可为什么读的文件超过100字符就出错呢
只看楼主 加入收藏
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:18 
T版和P版·我完成了可为什么读的文件超过100字符就出错呢
.
程序代码:
#include <stdio.h>
#include <string.h>
#define MAXLINE 1024
main()
{
  char line[MAXLINE];
  int  indent = 0;
  char *p;
  int  i;
  int  k = 0;
  FILE *fip = fopen("a.c", "r");
  FILE *fop = fopen("a.tmp", "w");
  char j[] = {0x20};
  fgets(line, MAXLINE, fip);
  while(!feof(fip)){
    if(line[strlen(line)-2] == '}'){                         /*这是选文件行最后第二个字符是不是'{'  是的话(缩进indent)-2*/
        --indent;
        --indent;
    }
    for(i=0; i<indent; i++){                                 /*这个for是为了如果(缩进)大于0的时候  把空格输入到a.tmp*/
     fwrite(j, 1, sizeof(char), fop);
    }

    if(line[strlen(line)-2] == '{'){                        /*这个跟上上面的一样·不过是'}'这个符号时 缩进+2*/
      ++indent;
      ++indent;
    }
    while(line[k++] == ' ')                                  /*这个是把句子前面的空格去掉·*/
      ;
    fputs(line+(k-1), fop);                                  /*把没有空格的行输入到a.tmp*/
    k = 0;                                                   /*k = 0 ,让下一次读行时从新计算空格*/
    fgets(line, MAXLINE, fip);
  }
  fclose(fip);
  fclose(fop);
  system("move a.c a.bak");
  system("move a.tmp a.c");

}
问题如上...为什么我读的文件里面超过100字节就读空了呢````






[ 本帖最后由 clcqifeng 于 2012-3-2 15:32 编辑 ]
搜索更多相关主题的帖子: 100 
2012-03-02 15:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
你这个代码的写法怎么那么古怪呢。把测试文件传上来看看。

授人以渔,不授人以鱼。
2012-03-02 15:18
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 2楼 TonyDeng

如果用这个92个字节的 能正确输出{后面的2个空格。到}为止
程序代码:
#include <stdio.h>

main()

{
  char j =0x20;
        printf("```%c```\n",j);


}
不过只要加多几个空格超过100个字节了。。。就读空了
2012-03-02 15:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在吃饭呢,等会调试一下你的代码看。

授人以渔,不授人以鱼。
2012-03-02 15:26
chan_
Rank: 3Rank: 3
来 自:武汉
等 级:论坛游侠
帖 子:84
专家分:122
注 册:2012-2-29
收藏
得分:0 
学习中
2012-03-02 15:26
clcqifeng
Rank: 2
等 级:论坛游民
帖 子:101
专家分:17
注 册:2012-2-16
收藏
得分:0 
回复 4楼 TonyDeng
恩恩。。。程序我把每句意思标上了。。。怪是怪了点。= =如要问为什么先写减缩进后写加缩进。是因为先写加缩进然后把空格输入在写减缩进的话   读到'{' 这个符号那行前面会有空格。。
2012-03-02 15:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,看起来是个C代码格式规范器。上学时写过,旁观两位版主的精彩讲解。

重剑无锋,大巧不工
2012-03-02 15:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 6楼 clcqifeng
最后那个花括号读不出的原因,是你那个测试文件最后的花括号后面没有回车换行。fgets()必须读到'\n'才算,那一行没有'\n',所以读不进来。

授人以渔,不授人以鱼。
2012-03-02 16:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这个程序可修改的地方很多,再完善一下吧。编译时有警告p指针没有使用,你不理会它?像两个++indent、--indent之类,干嘛不写indent += 2这样的?定义int indent = 2做重复次数也比这样写要好,到时要你改缩进4格,看你怎么改?那个判断文件结束的标志,也可以改,把fgets()放到while()循环中第一行,就不用写两次fgets()。还有char j[] = {0x20};也是很古怪的代码。

[ 本帖最后由 TonyDeng 于 2012-3-2 17:26 编辑 ]

授人以渔,不授人以鱼。
2012-03-02 16:52
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是我调试你前面问题的程序,其余的没改,就改了那个最后读不进来的问题:

程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

#define MAXLINE 1024

void main()
{
    char line[MAXLINE];
    int  indent = 0;
    //char *p;
    int  i;
    int  k = 0;
    FILE *fip = fopen("c:\\My Documents\\Visual Studio 2010\\Projects\\test\\Test4\\test.c", "r");
    //FILE *fop = fopen("a.tmp", "w");
    FILE* fop = stdout;
    char j[] = {0x20};
    while(!feof(fip)){
        if (fgets(line, MAXLINE, fip) == NULL)
        {
            break;
        }
        if(line[strlen(line)-2] == '}'){                         /*这是选文件行最后第二个字符是不是'{'  是的话(缩进indent)-2*/
            --indent;
            --indent;
        }
        for(i=0; i<indent; i++){                                 /*这个for是为了如果(缩进)大于0的时候  把空格输入到a.tmp*/
            fwrite(j, 1, sizeof(char), fop);
        }

        if(line[strlen(line)-2] == '{'){                        /*这个跟上上面的一样·不过是'}'这个符号时 缩进+2*/
            ++indent;
            ++indent;
        }
        while(line[k++] == ' ')                                  /*这个是把句子前面的空格去掉·*/
            ;
        fputs(line+(k-1), fop);                                  /*把没有空格的行输入到a.tmp*/
        k = 0;                                                   /*k = 0 ,让下一次读行时从新计算空格*/
    }
    fclose(fip);
    fclose(fop);
    //system("move a.c a.bak");
    //system("move a.tmp a.c");

    _getch();
}



[ 本帖最后由 TonyDeng 于 2012-3-2 17:13 编辑 ]

授人以渔,不授人以鱼。
2012-03-02 17:06
快速回复:T版和P版·我完成了可为什么读的文件超过100字符就出错呢
数据加载中...
 
   



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

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