为什么这些循环奇怪地增加?

时间:2013-10-15 18:05:33

标签: c loops multidimensional-array

#include <stdio.h>
#include <stdlib.h>

    int main(){

        int rows, col, i, j;
        char **mazeArrP;

        scanf("%d %d", &rows, &col);

        mazeArrP = (char **) malloc(rows*sizeof(char));

        for(i = 0; i<rows; i++){

            printf("i = %d\n", i);
            mazeArrP[i] = (char *) malloc(col*sizeof(char));

            for(j = 0; j<col; j++){

                printf("j = %d\n", j);
                scanf("%c", &mazeArrP[i][j]);
            }
        }

        return 0;
    }

我使用打印来识别我当前在循环中的位置。我正在尝试创建一个简单的2D字符数组,但我的循环行为奇怪。这是我第一次尝试使用双指针创建一个2D数组,因此在该领域的任何帮助也非常受欢迎。它似乎是0,0然后是0,1然后要求扫描,然后跳到i = 1 j = 0,依此类推。我错过了一些基本的东西吗?

2 个答案:

答案 0 :(得分:7)

mazeArrP = (char **) malloc(rows*sizeof(char));

错了。改为

mazeArrP = malloc(rows * sizeof(*mazeArrP));

此外,该行

mazeArrP[i] = (char *) malloc(col*sizeof(char));

可以写成

mazeArrP[i] = malloc(col);

sizeof(char)为1,因此多余。

答案 1 :(得分:4)

除了malloc问题,

您的循环行为“奇怪”因为前一个scanf的尾随换行符被视为新输入。

所以使用:

int c;
while((c=getchar())!='\n' && c!=EOF) ; //to remove newlines from previous scanf
scanf

之后