首页 文章

用C填充形状

提问于
浏览
1

我写了一个用星号填写封闭数字的程序 . 由于某种原因,它不接受标记值EOF(Ctrl-D) . 为什么是这样?

#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("\n");
}

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("\n");
    }
}

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()) != '\n') {
            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 - 我做错了什么?!

2 回答

  • 4
    while ((temp = getchar()) != '\n') {
        shape`[i][j]` = temp;
        j++;
    }
    

    我怀疑,一旦达到 EOF ,这永远不会退出 . 我的意思是, getchar 可能会继续向你扔 EOF 然后你问“不 \n ?好吧,没必要停下来” .

    另外,@ Neil Butterworth在他的回答中说的是非常明智的 .

  • 3

    你要:

    int temp;
    

    EOF是整数值,而不是char .

相关问题