打印时,我的2D数组中有一个缺少的元素

时间:2016-01-07 12:43:43

标签: c

#include<stdio.h>
#include<stdlib.h>
#define MSIZE 10
int main()
{
    int Size, gen, i, j;
    printf("Enter number of generations\t");
    scanf("%d", &gen);
    printf("\nEnter size of the matrix (max size is %d and min is 2)\t", MSIZE);
    scanf("%d", &Size);
    if (Size > MSIZE)  {
        printf("\nSize should not be more than %d", MSIZE);
        return 1;
    }
    if (Size < 2)  {
        printf("\nSize should not be less than 2");
        return 1;
    }
    char **m = (char**) calloc(Size, sizeof(char*));
    for (i=0; i<Size; i++)
    {
        m[i] = (char*) calloc(Size, sizeof(char));
    }
    printf("Enter matrix of first generation\n");
    for (i=0; i<Size; i++)  {
        for (j=0; j<Size; j++)  {
            scanf("%c", &m[i][j]);
            /*to make sure*/
            printf("%c ", m[i][j]);
        }
        printf("\n\n");
    }
}

这是我的计划的第一部分,应该是康威的死亡游戏。我认为,问题出在输入函数中,因为如果我自己在程序中填充它(而不是通过输入),它将被正确打印。

1 个答案:

答案 0 :(得分:2)

  

我认为,问题在于输入功能,因为如果我填写它   在我自己的程序内(不是通过输入),它将被正确打印。

scanf()中的"%c"前需要一个空格来使用上一个换行符/输入:

for (i=0; i<Size; i++)  {
    for (j=0; j<Size; j++)  {
        scanf(" %c", &m[i][j]);
        /*to make sure*/
        printf("%c ", m[i][j]);
    }
    printf("\n\n");
}

当您在上一个scanf()上按Enter键时,输入缓冲区中会出现换行符。在%c前面添加一个空格会让scanf()跳过该换行符(和其他空格)。