gpt4 book ai didi

c - 为什么我的输出没有随着每次循环迭代而改变?

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:13 25 4
gpt4 key购买 nike

我正在基于 Conway 的生命游戏在 Ubuntu 中使用 GCC 创建一个简单的 C 应用程序。我基本上拥有我需要的所有代码,但我在处理代码的一小部分时遇到了问题。

我的 C 源文件:

#include <stdio.h>
#include <stdlib.h>

#define HEIGHT 32
#define WIDTH 32
#define COMPASS 8
#define SPACE '.'

unsigned long mask = 0x80000000;
unsigned long row[WIDTH] = { 0 };
unsigned long copy[WIDTH] = { 0 };

int northWest(int rowNum) {
copy[rowNum - 1] = row[rowNum - 1] >>= 1;
return copy[rowNum - 1] & row[rowNum];
}

int north(int rowNum) {
copy[rowNum - 1] = row[rowNum - 1];
return copy[rowNum - 1] & row[rowNum];
}

int northEast(int rowNum) {
copy[rowNum - 1] = row[rowNum - 1] <<= 1;
return copy[rowNum - 1] & row[rowNum];
}

int west(int rowNum) {
copy[rowNum] = row[rowNum] >>= 1;
return copy[rowNum] & row[rowNum];
}

int east(int rowNum) {
copy[rowNum] = row[rowNum] <<= 1;
return copy[rowNum] & row[rowNum];
}

int southWest(int rowNum) {
copy[rowNum + 1] = row[rowNum + 1] >>= 1;
return copy[rowNum + 1] & row[rowNum];
}

int south(int rowNum) {
copy[rowNum + 1] = row[rowNum];
return copy[rowNum + 1] & row[rowNum];
}

int southEast(int rowNum) {
copy[rowNum + 1] = row[rowNum + 1] <<= 1;
return copy[rowNum + 1] & row[rowNum];
}

void clearRows(unsigned long row[]) {
int i;
system("clear");
for (i = 0; i < HEIGHT; ++i) {
row[i] = 0;
}
}

void displayBinary(unsigned long x) {
int bit;
/*int mask;*/
for (bit = 0; bit < HEIGHT; ++bit)
{
mask = 1 << bit;
printf("%c", (x & mask) ? 'X' : SPACE);
}
printf("\n");
}

int main(void) {
int i, j, alive;
char ch;
unsigned long init32;
srand(time(NULL));

for (i = 0; i < HEIGHT; ++i) {
init32 = ((double)rand() / RAND_MAX) * 0xFFFFFFFF;
row[i] = init32;
displayBinary(row[i]);
}

do {
system("clear");
for (i = 0; i < WIDTH; ++i) {
unsigned long neighbours[COMPASS] = {
north(i),
south(i),
west(i),
east(i),
northEast(i),
northWest(i),
southEast(i),
southWest(i)
};

for (j = 0; j < COMPASS; ++j) {
alive += ((mask & neighbours[j]) ? 1 : 0);
}

displayBinary(row[i]);
}
} while ((ch = getchar()) != 'n');

return EXIT_SUCCESS;
}

当应用程序首次启动时,输出是我所期望的(随机“X”和“.”字符的 32x32 网格),但对于此后的每次迭代,没有任何变化。我希望每个循环都根据我拥有的方法(north()、west() 等...)重新计算邻居并打印新的“X”和“.”。 32x32 网格上的值。

任何人都可以就如何将新值放入要在屏幕上打印的数组提供某种帮助吗?顺便说一下,我是 C 语言编程的新手。谢谢。

最佳答案

我没有看到您在代码中的任何地方更新您的行数组。您不应该在 do while 循环中更新它吗?

好的,我在下面复制的函数中看到,您也使用 row >>= 1 来更改行。但是由于您使用的是按值传递而不是按引用传递,因此原始行值保持不变。

int northWest(unsigned long row, int rowNum) {
copy[rowNum - 1] = row >>= 1;
return copy[rowNum - 1];
}

您可以使用按值传递来解决这个问题。或者由于您的行数组是全局的,因此您可以使用传递的 rowNum(索引)在这些函数中直接更改它。

关于c - 为什么我的输出没有随着每次循环迭代而改变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21587746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com