鱼C论坛

 找回密码
 立即注册
查看: 1653|回复: 1

[技术交流] 读取文件并输出不含某些注释的内容

[复制链接]
发表于 2020-2-28 01:05:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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


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

  3. #define MAX 1024

  4. int main()
  5. {
  6.     FILE *fp;
  7.     char txt[MAX];
  8.     //1.原样输出文件内容
  9.     if((fp = fopen("1.txt", "r")) == NULL)
  10.     {
  11.         printf("文件打开失败!\n");
  12.         exit(EXIT_FAILURE);
  13.     }

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

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

  27.     while(!feof(fp))
  28.     {
  29.         if(fgets(txt, MAX, fp) != NULL)
  30.         {
  31.             int i = 0;
  32.             while(txt[i] != '\n')
  33.             {
  34.                 if(txt[i] != '/' || txt[i+1] != '/')
  35.                 {
  36.                     printf("%c", txt[i]);
  37.                     i++;
  38.                 }
  39.                 else
  40.                     break;
  41.             }
  42.             printf("\n");
  43.         }
  44.     }
  45.     printf("\n");
  46.     fclose(fp);

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

  53.     int temp = 0;   //temp=1时说明遇到了"/*"
  54.     while(!feof(fp))
  55.     {
  56.         if(fgets(txt, MAX, fp) != NULL)
  57.         {
  58.             int i = 0;
  59.             while(txt[i] != '\n')
  60.             {
  61.                 if(temp == 1)//若temp=1,则暂停输出,找"*/"
  62.                 {
  63.                     if(txt[i] == '*' && txt[i+1] == '/')
  64.                     {
  65.                         temp = 0;//找到匹配字符串"*/",temp初始化
  66.                         i += 2;  //从注释之后开始继续输出
  67.                         continue;
  68.                     }
  69.                     else//没找到匹配的就继续找
  70.                     {
  71.                         i++;
  72.                         continue;
  73.                     }
  74.                 }
  75.                 if(txt[i] == '/' && txt[i+1] == '/')//若遇到"//"则剩下的整行都不用输出
  76.                     break;
  77.                 else if(txt[i] == '/' && txt[i+1] == '*')//若遇到"/*"则置temp为1,继续向后查找"*/"
  78.                 {
  79.                     temp = 1;
  80.                     i++;
  81.                     continue;
  82.                 }
  83.                 else
  84.                 {
  85.                     printf("%c", txt[i]);
  86.                 }
  87.                 i++;
  88.             }
  89.             printf("\n");
  90.         }
  91.     }

  92.     printf("\n");
  93.     fclose(fp);

  94.     return 0;
  95. }

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


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-28 10:04:56 From FishC Mobile | 显示全部楼层
棒棒
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-6 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表