好的我还有另一个问题,我们应该把这个程序.C文件并删除它的所有注释,我有点工作,但程序似乎在删除第一个注释后卡住了。删除第一条评论后,它会停止在其后保存,我无法找出原因。
确切的书籍问题:编写程序以删除C程序中的所有注释。不要忘记正确处理带引号的字符串和字符常量。
我只编写了这个程序来删除/ * * /注释,如果我得到了它的工作,那就改变它以便能够做//注释。
#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
答案 0 :(得分:1)
当您处于评论区域时,您应该停止增加j
或填写非'\0'
的内容,因为j
会继续。否则,由于未初始化'\0'
,缓冲区可能会被随机arraySecondary
停止。
我的实现将从for循环中删除j++
,并按如下方式生成out-of-comment-area语句。
else if(string == OUT)
{
arraySecondary[j++] = arrayPrimary[i];
}