問:我爲什麼能成功編譯我的代碼(沒有任何警告),但奇怪的是它沒有做運行,我沒有想法,它背後的原因。我解決了創建使用C和我的代碼隨機遊走的問題如下─我的隨機漫步程序編譯但不運行
提到這是我一直在努力的問題:
我寫一個C程序randWalk.c生成一個10x10陣列的隨機遊走。
最初,數組只包含點字符('。')和A [0] [0]中的起始位置。
程序必須從元素到元素隨機「走」,總是向上,向下,向左或向右移動一步。該程序訪問的元素將按照訪問的順序(僅在到達字母Z後停止步行)以字母A到Z進行標記。當步行完成該程序將打印最終數組值如下面的例子:
規則 1.執行移動之前,檢查:
•它不會超出陣列。
•它不會走到已經分配字母的元素(被阻擋的元素)。
如果違反任一條件,請嘗試向另一個方向移動。
如果所有四個方向都被阻塞,程序必須終止。
我的解決方案/代碼:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ONE_DOT '.',
#define TWO_DOTS ONE_DOT ONE_DOT
#define FIVE_DOTS TWO_DOTS TWO_DOTS ONE_DOT
#define TEN_DOTS { FIVE_DOTS FIVE_DOTS },
#define TWENTY_DOTS TEN_DOTS TEN_DOTS
#define FIFTY_DOTS TWENTY_DOTS TWENTY_DOTS TEN_DOTS
#define ONE_HUNDRED_DOTS FIFTY_DOTS FIFTY_DOTS
int B[10][10] = {ONE_HUNDRED_DOTS};
char A[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
int main()
{
int i = 0;
int j = 0;
int n = 0;
int a, b, c, d;
int check;
while (check != a + b + c + d)
{
srand(time(NULL));
int r = rand() % 4;
switch (r)
{
case 0:
i--;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = a + check;
}
break;
case 1:
j++;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = check + b;
}
break;
case 2:
i++;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = check + c;
}
break;
case 3:
j--;
if (B[i][j] == '.')
{
if (((0 <= i) && (i <= 10))&&((0 <= i) && (i <= 10)))
{
B[i][j] = A[n];
n++;
}
}
else
{
check = check + d;
}
break;
}
int row, columns;
for (int row = 0; row < 10; row++)
{
for (int columns = 0; columns < 10; columns++)
{
printf("%d ", B[row][columns]);
}
printf("\n");
}
}
return 0;
}
您是否試過通過調試器運行它?它進入main()嗎?如果是這樣,它在哪裏阻塞? – KABoissonneault
爲什麼你的一個... DOT'#define's包含'{大括號}'而不是其他? –
我不確定版權聲明是怎麼回事,但用戶對本網站的貢獻屬於[創作共用許可](https://creativecommons.org/licenses/by-sa/3.0/) –