好的,所以在我正在研究的这本书中(尝试学习函数),我的编程项目是将我在上一章中编写的以前的程序转换为使用函数。所以我对其进行了转换,编译和运行,但是在运行该函数后,它无法执行该函数内的任何循环....因此,该程序运行了,但控制台中没有任何内容,只需按任意键即可出口。
我认为这可能与我的#define有关,但我不确定,因为我仍在尝试学习它们,并且本章似乎在代码的一部分中指出,无论功能如何,宏都可以在整个程序中使用。 ..纠正我,如果我错了,但是这是下面的代码,我对其进行了一些测试,并且这些函数被调用并一直运行,但是for循环如此使我无法运行我的printf测试...。
// Chapter 9 Programming Project #3
1 #include <stdio.h>
2 #include <stdbool.h>
3 #include <stdlib.h>
4 #include <time.h>
5
6 #define SIZE 10
7 #define PATH_SIZE 25
8 #define ROW_SIZE ((int) (sizeof(walk) / sizeof(walk[0])))
9
10 void generate_random_walk(char walk[SIZE][SIZE]);
11 void print_array(char walk[SIZE][SIZE]);
12
13 int main(void)
14 {
15 char walk[SIZE][SIZE];
16 // Create board
17 generate_random_walk(walk);
18 // Print board
19 print_array(walk);
20 return 0;
21 }
22
23 void generate_random_walk(char walk[SIZE][SIZE])
24 {
25 // 0 = Up, 1 = Down, 2 = Left, 3 = Right
26 int i, x, y;
27
28 // Generate a random number
29 srand((int) time(NULL));
30 int dir = rand() % 4;
31
32 // Set all positions of walk to '.'
33 for (x = 0; x < ROW_SIZE; x++) {
34 for (y = 0; y < ROW_SIZE; y++)
35 walk[x][y] = '.';
36 printf("Set Test: %d\n", x);
37 }
38 x = 0;
39 y = 0;
40 walk[0][0] = 'A';
41
42 // Generate the path
43 for (i = 0; i < PATH_SIZE;) {
44 // Check that the last character has not been cornered
45 if ((walk[x][y - 1] != '.' || y - 1 < 0) &&
46 (walk[x][y + 1] != '.' || y + 1 > ROW_SIZE) &&
47 (walk[x - 1][y] != '.' || x - 1 < 0) &&
48 (walk[x + 1][y] != '.' || x + 1 > ROW_SIZE))
49 break;
50
51 // Check the direction and replace that char
52 switch (dir) {
53 case 0: if ((y - 1) >= 0
54 && walk[x][y - 1] == '.') {
55 walk[x][--y] = i + 'B';
56 ++i;
57 } break;
58 case 1: if ((y + 1) < ROW_SIZE
59 && walk[x][y + 1] == '.') {
60 walk[x][++y] = i + 'B';
61 ++i;
62 } break;
63 case 2: if ((x - 1) >= 0
64 && walk[x - 1][y] == '.') {
65 walk[--x][y] = i + 'B';
66 ++i;
67 } break;
68 case 3: if ((x + 1) < ROW_SIZE
69 && walk[x + 1][y] == '.') {
70 walk[++x][y] = i + 'B';
71 ++i;
72 } break;
73 default: if (walk[x][y] == '.')
74 walk[x][y] = i + 'B';
75 break;
76 }
77
78 // Reset the random directions
79 dir = rand() % 4;
80 }
81 }
82
83 void print_array(char walk[SIZE][SIZE])
84 {
85 int x, y;
86 // Print the walk
87 for (x = 0; x < ROW_SIZE; x++) {
88 for (y = 0; y < ROW_SIZE; y++)
89 printf("%4c ", walk[x][y]);
90 printf("\n");
91 printf("Print Test: %d\n", x);
92 }
93 }
只是想花时间感谢这个社区中的每个人所提供的所有支持,我希望我能尽快得到您的支持。
当我尝试运行此命令时,收到以下编译器警告:
Untitled.c:34:25: warning: sizeof on array function parameter will return size of 'char (*)[10]' instead of 'char [10][10]' [-Wsizeof-array-argument]
for (x = 0; x < ROW_SIZE; x++) {
^
我忘记了细节(如果知道的话,请进来一点),但我似乎还记得关于C处理传递给函数的数组的方式很奇怪的事情。您可能想要计算数组的大小,并将其作为附加参数传递给函数,如下所示:
void generate_random_walk(char walk[SIZE][SIZE], int arraySize)
我的C语言有点生疏,所以如果我错过了一些东西,请有人更正我的参数语法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句