simple logic in program

I'm looking at one of exercises from book, and basically this simple program is straightforward, except one thing. There is a conditional check "if (advance(head) == tail)", but in this program it doesn't seem to be needed. When will tail ever be a greater value than head?


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
#include <stdio.h>


#include <stdlib.h>



#define MAXQUEUE 1001



int advance(int pointer)

{

  if (pointer < MAXQUEUE - 1)

    return pointer + 1;

  else

    return 0;

}



int main(void)

{

  char blank[MAXQUEUE];

  int head, tail;

  int nonspace;

  int retval;

  int c;



  retval = nonspace = head = tail = 0;

  while ((c = getchar()) != EOF) {

    if (c == '\n') {

      head = tail = 0;

      if (nonspace)

        putchar('\n');

      nonspace = 0;

    }

    else if (c == ' ' || c == '\t') {

      if (advance(head) == tail) {

        putchar(blank[tail]);

        tail = advance(tail);

        nonspace = 1;

        retval = EXIT_FAILURE;

      }



      blank[head] = c;

      head = advance(head);

    }

    else {

      while (head != tail) {

        putchar(blank[tail]);

        tail = advance(tail);

      }

      putchar(c);

      nonspace = 1;

    }

  }



  return retval;

}
If you insert and remove elements, the head won't be at the beginning of the list, and it will "wrap around". That's why there is that check.
Topic archived. No new replies allowed.