2014-02-24 100 views
2

好的我有這個程序的另一個問題,我們應該採取.C文件並從中刪除所有的評論,我有它的工作,但程序似乎卡住後,它消除第一條評論。在它刪除第一條評論後,它會停止保存,並且我不知道爲什麼。C編程語言練習1-23

準確書問題:撰寫一個程序,刪除所有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; 
} 

如果我輸入這個Codefile我得到。

#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 

回答

1

當您在留言區域,您應該停止增加j或填充一些非'\0'j前進。否則,由於未初始化arraySecondary,緩衝區可能會隨機由'\0'停止。

我的實現是從for循環中刪除j++,並按如下方式創建out-of-comment-area語句。

else if(string == OUT) 
    { 
     arraySecondary[j++] = arrayPrimary[i]; 
    } 
+0

謝謝,這似乎解決了它,我甚至沒有意識到我可以使用j ++的方式,再次謝謝你。 – Endon55