马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
}
我刚学不久,可能代码写的一团糟,但是总之是可以运行的,输出结果与预想相同。
|