заполнить форму с C - PullRequest
1 голос
/ 31 мая 2011

Я написал программу, чтобы заполнить закрытые цифры звездочками. по какой-то причине он не принимает дозорное значение 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);
}

хорошо, только что обновил код. это не совсем печатать коробку. что происходит ??

еще одно обновление для кода. на этот раз я копирую значение temp. однако я получаю Bus error - что я делаю не так?!

Ответы [ 2 ]

4 голосов
/ 31 мая 2011

Вы хотите:

int temp;

EOF - целочисленное значение, а не символ.

3 голосов
/ 31 мая 2011
while ((temp = getchar()) != '\n') {
    shape`[i][j]` = temp;
    j++;
}

Я подозреваю, что это никогда не завершится после достижения EOF.Я имею в виду, getchar, вероятно, продолжает бросать в вас EOF, и вы спрашиваете: «Не \n? Хорошо, нет необходимости останавливаться».

Кроме того, @Neil Butterworth сказал в своем ответе:1008 * действительно разумно .

...