|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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[MAX];
- //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[i] != '\n')
- {
- if(txt[i] != '/' || txt[i+1] != '/')
- {
- printf("%c", txt[i]);
- 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[i] != '\n')
- {
- if(temp == 1)//若temp=1,则暂停输出,找"*/"
- {
- if(txt[i] == '*' && txt[i+1] == '/')
- {
- temp = 0;//找到匹配字符串"*/",temp初始化
- i += 2; //从注释之后开始继续输出
- continue;
- }
- else//没找到匹配的就继续找
- {
- i++;
- continue;
- }
- }
- if(txt[i] == '/' && txt[i+1] == '/')//若遇到"//"则剩下的整行都不用输出
- break;
- else if(txt[i] == '/' && txt[i+1] == '*')//若遇到"/*"则置temp为1,继续向后查找"*/"
- {
- temp = 1;
- i++;
- continue;
- }
- else
- {
- printf("%c", txt[i]);
- }
- i++;
- }
- printf("\n");
- }
- }
- printf("\n");
- fclose(fp);
- return 0;
- }
复制代码 我刚学不久,可能代码写的一团糟,但是总之是可以运行的,输出结果与预想相同。
|
|