C programmin 2D阵列问题,循环未如预期的那样发生

问题描述 投票:0回答:1

传染病模拟

在这项带回家的考试中,您的任务是模拟传染病的传染过程。该环境将以10x10网格的形式提供。网格的每个单元格都将包含字符“ H”,“ I”和“-”之一,其中“ H”代表健康,“ I”代表感染者。 “-”表示此单元格未被任何人占用;换句话说,它是空的。

[在模拟的每一步(针对每一代),感染者都会感染他/她附近所有健康的人。它们只能通过向上,向下,向右和向左的方向进行感染。对角线感染是不可能的。

模拟步骤的数量将作为输入提供,您将相应地运行模拟。最后一个模拟步骤完成后,您将打印网格的状态。

[虽然您正在计算下一代,但是您将仅考虑上一代的状态。

输入格式:

在网格的每一行之后,将给出一个新行'\ n'字符。读取网格后,您应该从输入中读取模拟数量。

示例输入和输出:

输入1:

--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
1

OUTPUT 1EXPECTED:
--IIH---I-
-H--------
----------
----I-----
----II----
----I-----
----H-----
-H--------
---------I
-II--H---I

OUTPUT I GET 1 
--III---I-                                                                      
-I--------                                                                      
----------                                                                      
----H-----                                                                      
----IH----                                                                      
----H-----                                                                      
----H-----                                                                      
-H--------                                                                      
---------I                                                                      
-      

输入2:

--IHH---I-
-H--------
----------
----H-----
----IH----
----H-----
----H-----
-H--------
---------I
-HI--H---I
3

预计输出2:

--III---I-
-H--------
----------
----I-----
----II----
----I-----
----I-----
-H--------
---------I
-II--H---I

OUTPUT 2 I GET
    --III---I-                                                                      
    -I--------                                                                      
    ----------                                                                      
    ----H-----                                                                      
    ----IH----                                                                      
    ----H-----                                                                      
    ----H-----                                                                      
    -H--------                                                                      
    ---------I                                                                      
    -      

这是代码ı为此编写的:

#include <stdio.h>
int main()
{
char x;    

char grid[10][10] = {0};

int i,j,n,c;

for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10 ; j++)
        {
        scanf("%c",&x);

        grid[i][j] = x;
        }
    }

scanf("%d",&n);

c = 0;i=0;j=0;
for(c=0,i = 0;i < 10 ; i++, c++)
{
    for(j = 0 ;j < 10 ; j++ )
    {   
        if(c>n)
        {
            break;
        }
        if(grid[i][j] == 'I' && grid[i][j+1] == 'H')
        {
            grid[i][j+1]='I';
        }
        if(grid[i][j] == 'I' && grid[i][j-1] == 'H' && j>0)
        {
            grid[i][j-1]='I';
        }
        if(grid[i][j] == 'I' && grid[i+1][j] == 'H')
        {
            grid[i+1][j]='I';
        }
        if(grid[i][j] == 'I' && grid[i-1][j] == 'H' && i>0)
        {
            grid[i-1][j]='I';
        }

    }
}

for(i = 0; i < 10; i++)
    {
        for(j = 0; j < 10 ; j++)
        {
        printf("%c",grid[i][j]);
        }
    }
return 0;
}
c arrays multidimensional-array
1个回答
0
投票

您应该像这样使用scanf

scanf(" %c",&x); //with a leading blank to skip optional white space. 

否则,scanf捕获换行符作为输入。您也可以检查此问题以更好地理解。scanf() leaves the new line char in the buffer

© www.soinside.com 2019 - 2024. All rights reserved.