Ranbo_ 发表于 2020-2-28 01:05:37

读取文件并输出不含某些注释的内容

本帖最后由 Ranbo_ 于 2020-2-28 01:06 编辑

这是2019年华中科技大学的研究生入学考试的上机测试题的第二题。一共有三问。先将第一题的代码复制成文本文档。
(1)输出文本文档内的内容
(2)输出文本文档内去除了由//注释过的内容
(3)输出文本文档内不含任何注释的内容


#include <stdio.h>
#include <stdlib.h>

#define MAX 1024

int main()
{
    FILE *fp;
    char txt;
    //1.原样输出文件内容
    if((fp = fopen("1.txt", "r")) == NULL)
    {
      printf("文件打开失败!\n");
      exit(EXIT_FAILURE);
    }

    while(!feof(fp))
    {
      if(fgets(txt, MAX, fp) != NULL)//以免将最后一行输出两次
            printf("%s", txt);
    }
    printf("\n");
    fclose(fp);

    //2.输出删去了文件中的"//"注释的内容
    if((fp = fopen("1.txt", "r")) == NULL)
    {
      printf("文件打开失败!\n");
      exit(EXIT_FAILURE);
    }

    while(!feof(fp))
    {
      if(fgets(txt, MAX, fp) != NULL)
      {
            int i = 0;
            while(txt != '\n')
            {
                if(txt != '/' || txt != '/')
                {
                  printf("%c", txt);
                  i++;
                }
                else
                  break;
            }
            printf("\n");
      }
    }
    printf("\n");
    fclose(fp);

    //3.输出删去了所有注释的内容
    if((fp = fopen("1.txt", "r")) == NULL)
    {
      printf("文件打开失败!\n");
      exit(EXIT_FAILURE);
    }

    int temp = 0;   //temp=1时说明遇到了"/*"
    while(!feof(fp))
    {
      if(fgets(txt, MAX, fp) != NULL)
      {
            int i = 0;
            while(txt != '\n')
            {
                if(temp == 1)//若temp=1,则暂停输出,找"*/"
                {
                  if(txt == '*' && txt == '/')
                  {
                        temp = 0;//找到匹配字符串"*/",temp初始化
                        i += 2;//从注释之后开始继续输出
                        continue;
                  }
                  else//没找到匹配的就继续找
                  {
                        i++;
                        continue;
                  }
                }
                if(txt == '/' && txt == '/')//若遇到"//"则剩下的整行都不用输出
                  break;
                else if(txt == '/' && txt == '*')//若遇到"/*"则置temp为1,继续向后查找"*/"
                {
                  temp = 1;
                  i++;
                  continue;
                }
                else
                {
                  printf("%c", txt);
                }
                i++;
            }
            printf("\n");
      }
    }

    printf("\n");
    fclose(fp);

    return 0;
}

我刚学不久,可能代码写的一团糟,但是总之是可以运行的,输出结果与预想相同。


九黎34 发表于 2020-2-28 10:04:56

棒棒
页: [1]
查看完整版本: 读取文件并输出不含某些注释的内容