我写了一个用星号填写封闭数字的程序。由于某种原因,它不接受标记值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
- 我做错了什么?!
答案 0 :(得分:4)
你想:
int temp;
EOF是一个整数值,而不是char。
答案 1 :(得分:3)
while ((temp = getchar()) != '\n') {
shape`[i][j]` = temp;
j++;
}
我怀疑这一点在EOF
到达后永远不会退出。我的意思是,getchar
可能会继续向您发送EOF
并且您问“不是\n
?好的,不需要停止”。
另外,@ Neil Butterworth在答案中说的是非常明智。