我的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");
}