好的,我还有一个问题要问这个程序,我们应该接受.C文件并从中删除所有的注释,我有它的工作方式,但程序似乎在删除第一个注释后卡住了删除第一条评论之后,它就停止保存之后的内容,我也不知道为什么。
精确的书本问题:编写一个程序来删除C程序中的所有注释不要忘记正确处理带引号的字符串和字符常量。
我编写这个程序只是为了删除/**/comments,如果我让它工作,我会修改它,以便也可以执行//comments。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_BUFFER 5000
#define SPACE ' '
#define TAB '\t'
#define IN 1
#define OUT 0
/* ********************************************************************** */
int main()
{
char arrayPrimary[MAX_BUFFER];
char arraySecondary[MAX_BUFFER];
int i, c, j, size, string;
for(i = 0;(c = getchar()) != EOF && c != '\0'; i++)
{
arrayPrimary[i] = c;
}
arrayPrimary[i] = '\0';
size = i;
string = OUT;
/* ********************************************************************** */
for(i = 0, j = 0; i < size; i++, j++)
{
if((arrayPrimary[i] == '/' && arrayPrimary[i + 1] == '*'))
{
printf("IN\n");
string = IN;
}
else if(string == OUT)
{
arraySecondary[j] = arrayPrimary[i];
}
else if(string == IN && arrayPrimary[i] == '*' && arrayPrimary[i + 1] == '/')
{
printf("OUT\n");
i++;
string = OUT;
}
}
arraySecondary[j] = '\0';
printf("%s", arraySecondary);
return 0;
}
如果我输入这个代码文件,我会得到。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_BUFFER 5000
#define SPACE ' '
#define TAB '\t'
#define IN 1
#define OUT 0
最佳答案
当你在评论区时,你应该停止增加j
或者在'\0'
前进时填充一些非-j
的内容否则,由于未初始化,缓冲区可能会被随机'\0'
停止。
我的实现是从for循环中删除arraySecondary
,并按如下方式生成注释外区域语句。
else if(string == OUT)
{
arraySecondary[j++] = arrayPrimary[i];
}
关于c - C编程语言练习1-23,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21981016/