removing comments from program

I am following one of exercises in book. The first solution I am looking at is here:

http://users.powernet.co.uk/eton/kandr2/krx123.html

Basically it removes all comments from the program. Here is the actual code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <stdio.h>

#define MAXLINE 1000 /* max input line size */

char line[MAXLINE]; /*current input line*/

int getline(void);  /* taken from the KnR book. */

int main()

{

  int in_comment,len;

  int in_quote;

  int t;


  in_comment = in_quote = t = 0;

  while ((len = getline()) > 0 )

    {

      t=0;

      while(t < len)

        {

	  if( line[t] == '"')

		in_quote = 1;



	  if( ! in_quote )

	  {

          	if( line[t] == '/' && line[t+1] == '*')

            	{

              		t=t+2;

              		in_comment = 1;

            	}

          	if( line[t] == '*' && line[t+1] == '/')

            	{

              		t=t+2;

              		in_comment = 0;

            	}

          	if(in_comment == 1)

           	 {

              		t++;

            	}

          	else

            	{

              		printf ("%c", line[t]);

              		t++;

            	}

	  } 

	  else

	  {

              printf ("%c", line[t]);

              t++;

	  }

        }

    }
  return 0;
}

/* getline: specialized version */

int getline(void)

{

  int c, i;

  extern char line[];

  for ( i=0;i<MAXLINE-1 && ( c=getchar()) != EOF && c != '\n'; ++i)

    line[i] = c;

  if(c == '\n') 

    {

      line[i] = c;

      ++i;

    }

  line[i] = '\0';

  return i;
}


When the program discovers a double quote, it sets the in_quote flag to 1. But what about closed quotes? It doesn't ever seem to set the in_quote flag back to 0. Am I missing something?
Yes the program has a bug in it in that as soon as it encounters a " character, it will not behave as expected and will output every character it finds after that.

If you read further down the page, you will see the code writer did mention this bug, and there are more code snippets on the same page that attempt to correct the bug.
Topic archived. No new replies allowed.