我的2D数组中缺少一个元素,当它';印刷品 #包括 #包括 #定义MSIZE 10 int main() { 整数大小,gen,i,j; printf(“输入代数\t”); scanf(“%d”和“&gen”); printf(“\n矩阵的输入大小(最大大小为%d,最小为2)”,MSIZE); scanf(“%d”,大小(&S); 如果(大小>MSIZE){ printf(“\n大小不应超过%d”,MSIZE); 返回1; } 如果(尺寸

我的2D数组中缺少一个元素,当它';印刷品 #包括 #包括 #定义MSIZE 10 int main() { 整数大小,gen,i,j; printf(“输入代数\t”); scanf(“%d”和“&gen”); printf(“\n矩阵的输入大小(最大大小为%d,最小为2)”,MSIZE); scanf(“%d”,大小(&S); 如果(大小>MSIZE){ printf(“\n大小不应超过%d”,MSIZE); 返回1; } 如果(尺寸,c,C,我认为,问题在于输入函数,因为如果我填充它 在我自己的程序内部(不是通过输入),它将被正确打印 在中的“%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", &ge

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

在中的
“%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");
    }
}

用于(i=0;i实际上,这解决了我的问题,现在打印正确了,但您能解释一下为什么这样做吗。@GloryAyoub当您使用
scanf
时,用于输入数据的换行符也在输入缓冲区中,当您读取字符时,将读取换行符。添加前导空格将告诉
scanf
读取并放弃前导white空间。请注意,
%d等不需要该空间
format,因为该格式被指定为跳过前导空格。我建议您检查,尤其是格式代码表下面的段落。@GloryAyoub-请参阅Joachim Pileborg的评论和更新的答案。您为什么不能将其分配为2D数组而不是碎片查找表?即:
char(*m)[Size]=calloc(1,sizeof(char[Size][Size]);
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");
}