gpt4 book ai didi

c - 我的 if 语句在某个地方搞砸了,我的 GSA 无法帮助我

转载 作者:行者123 更新时间:2023-11-30 19:31:31 26 4
gpt4 key购买 nike

所以,这应该经过一个由 0、'; 和 1; 组成的文件(最初都是字符形式,但我设置为整数),但是当我运行它时,代码对相邻活细胞的计数是错误的,在 5 个位置拉出 3,而我的邻居数应该是 2。

电流输出;邻居方格表示每个单元格有多少个邻居(计算所有 8 个周围的图 block ),然后是基本生命游戏操作发生后更新的矩阵,最后是原始矩阵这是下面的原始矩阵

0;0;0;0;0;0

0;0;0;1;0;0

0;1;0;1;0;0

0;0;1;1;0;0

0;0;0;0;0;0

0;0;0;0;0;0

该过程的其余部分完美地进行,但邻居的计数不起作用。我做错了什么?

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void manage_board(FILE *input, int counter, int iterate);
int main (int argc, const char * argv[]){
FILE *input = fopen(argv[1],"r");
int counter = 0,temp1=0,temp2=0;
char temp = fgetc(input);
while (temp != EOF){
if (temp == '1' || temp == '0'){
counter+=1;
}
temp = fgetc(input) ;
}
counter = sqrt(counter);
rewind(input);
manage_board(input,counter, atoi(argv[2]));
fclose(input);
return 0;
}
void manage_board(FILE *input, int counter, int iterate){
int matrix[counter][counter];
FILE *output = fopen("output.csv","w");
int original[counter][counter];
int updated[counter][counter];
int rows = 0,cols = 0, neighbors =0;
char temp = fgetc(input);
/*for (int i=0; i<counter; i++){
for (int j=0; j<counter; j++){
updated[i][j] = 0;
}
printf ("\n");
}*/
while (temp != EOF){
//printf("%c",temp);
if (temp == '1' && temp != ';'){
matrix[cols][rows] = 1;
rows++;
}
else if (temp == '0' && temp != ';'){
matrix[cols][rows] = 0;
rows++;
}
if (rows==6){
cols++;
rows=0;
}
temp = fgetc(input);
}
for (int i=0; i<counter; i++){
for (int j=0; j<counter; j++){
updated[i][j] = 0;
}
//printf ("\n");
}
for (int i=0; i<counter; i++){
for (int j=0; j<counter; j++){
original[i][j] =matrix[i][j];
}
//printf ("\n");
}
for (int loops = 0; loops < iterate;loops++){
for (int i=0; i<counter; i++){
for (int j=0; j<counter; j++){
if ( i !=counter-1){ //down one
if(matrix[i+1][j] == 1){
neighbors ++;
}
}
if ( i !=0){//up one
if(matrix[i-1][j] == 1){
neighbors++;
}
}
if ( j != counter-1){//right one
if (matrix[i][j+1] == 1){
neighbors++;
}
}
if (j !=0 ){//left one
if (matrix[i][j-1] == 1 ){
neighbors++;
}
}
if (i !=counter-1 && j != counter-1){//bot right
if(matrix[i+1][j+1] == 1)
neighbors++;
}
if (j != counter-1 && i !=0 ){//top right
if(matrix[i-1][j+1] == 1){
neighbors++;
}
}
if (j !=0 && i !=0){//top left
if (matrix[i-1][j-1] == 1){
neighbors++;
}
}
if (i !=counter-1 && j !=0 ){//bottom left
if (matrix[i+1][j-1] == 1){
neighbors++;
}
}
///printf("%d", matrix[i][j]);
//printf ("%d ",neighbors);
if (neighbors < 2 ){
updated[i][j]=0;
}
else if (neighbors == 2 && matrix[i][j] == 1)
updated[i][j]=1;
else if (neighbors > 3){
updated[i][j]=0;
}
else if (neighbors = 3){
updated[i][j]=1;
}
printf("%d ",neighbors);
neighbors = 0;
}
printf("\n");
}
for (int i=0; i<counter; i++){
for (int j=0; j<counter; j++){
matrix[i][j]= updated[i][j];
printf("%d",updated[i][j]);
updated[i][j] = 0;
}
printf("\n");
}
}
printf("original board\n");
for (int i=0; i<counter; i++){
for (int j=0; j<counter; j++){
printf("%d", original[i][j]);
}
printf ("\n");
}
//printf(" \nnew matrix\n\n");
/* for (int i=0; i<counter; i++){
for (int j=0; j<counter; j++){
if (updated[i][j] == 1){
fprintf( output, "%d %d \n", i, j);
//printf(updated)
}
}
}
*/
/* A live cell with fewer than two live neighbors dies.
A live cell with more than three live neighbors also dies.
A live cell with exactly two or three live neighbors lives.
A dead cell with exactly three live neighbors becomes alive.*/
}

这是我的输出

0 0 1 1 1 0
1 1 3 1 3 0
1 1 5 3 3 0
1 3 3 2 3 0
0 1 3 3 1 0
0 0 0 0 0 0


000000
001010
000110
011110
001100
000000
original board
000000
000100
010100
001100
000000
000000

邻居矩阵应该出现

0 0 1 1 1 0
1 1 3 1 2 0
1 1 5 3 3 0
1 2 3 2 2 0
0 1 2 2 1 0
0 0 0 0 0 0

最佳答案

有一些错误:

1.首先,您只处理固定数量的列:

    if (rows==6){
cols++;
rows=0;
}

这一定是

    if (rows==counter){
cols++;
rows=0;
}

读取 6 个值后开始新行。为此,您有一个额外的参数counter。请记住:您没有固定的尺寸。

如果您输入的不是6*6字段,您会将读取的值放在错误的位置。

2.除此之外,您的初始数组matrix未初始化并且包含垃圾值。这显然会弄乱你的结果。

解决方案很简单:使用 memset 或创建一个小循环将所有内容设置为 0。

3.对于每个字符,您都会增加行数,这是错误的。您交换了行和列。但由于您只接受方形输入字段,因此这并不重要。

4.最后你的问题:你的计数是正确的,但在采取行动的过程中你破坏了邻居的值(value)。

            else if (neighbors = 3){
updated[i][j]=1;
}

应该有一个==您的编译器应该对此发出警告。

关于c - 我的 if 语句在某个地方搞砸了,我的 GSA 无法帮助我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48544574/

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