用C填充形状

fill shape with C

我写了一个程序,用星号填充闭合的数字。出于某种原因,它不接受sentinel值eof(ctrl-d)。为什么会这样?

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

#define height 100
#define width 100

void showRow(int numbers[], int size_numbers) {
    int i;
    printf("[");
    for (i = 0; i < size_numbers-3; i++) {
        printf("%c,", numbers[i]);
  }
    printf("%c ]", numbers[size_numbers-3]);
    printf("
"
);
}

void showshape(int shape[][width], int lines, int max_buf) {
    int i, j;
    for (i = 0; i < lines; i++) {
        for (j = 0; j < max_buf; j++) {
            printf("%c", shape[i][j]);
        }
        printf("
"
);
    }
}

void fill(int row[][width], int rownum, int end) {
    int i, c = 1, inside = 0;
    for (i = 0; i < end; i++) {
        if (row[rownum][i] == '*') {
            c++;
        }
        if (!(c%2)) inside = 1;
        else inside = 0;
        if (inside) {
            row[rownum][i] = '*';
        }
    }
}

int main () {
    int shape[height][width], i = 0, j = 0, lines = 0;
    int sentinel = 0;
    int temp = 0;
    while (sentinel != EOF) {
        while ((temp = getchar()) != '
'
) {
            sentinel = temp;
            shape[i][j] = temp;
            j++;
        }
        i++;
        lines++;
    }
    for (i = 0; i < lines; i++) {
        fill(shape, i, width);
    }
    fill(shape, 0, j);
    //for (i = 0; i < lines; i++)
    showshape(shape, lines, j+2);
}

好的,刚刚更新了代码。这个盒子印的不太好。发生什么事??

代码的另一个更新。这次我复制了温度值。但是,我得到了Bus error--我做错了什么?!


你想要:

1
int temp;

EOF是一个整数值,而不是字符。


1
2
3
4
5
while ((temp = getchar()) != '
'
) {
    shape`[i][j]` = temp;
    j++;
}

我怀疑一旦到达EOF,这种情况就永远不会出现。我的意思是,getchar可能继续向你扔EOF,你问"不是
?好吧,没必要停下来。

而且,尼尔·巴特沃思在回答中所说的话是非常明智的。