首页 > 解决方案 > 在c中创建char的动态矩阵

问题描述

我想创建一个动态矩阵来输入一个字符,所以我首先创建一个 int 的动态矩阵,然后将其切换为 char 动态矩阵的代码可以正常工作:`

    #include <stdio.h>
    #include <stdlib.h>
  int main(){
    int r , c  , b;
    int *ptr, count = 0, i;
    printf("ROWS ");
    scanf("%d",&r);
    printf("COLS ");
    scanf("%d",&c);
    ptr = (int *)malloc((r * c) * sizeof(int));
    for (i = 0; i < r * c; i++)
    {
        scanf("%d",&b);
        ptr[i] = b;

    }
    for (i = 0; i < r * c; i++)
    {

        printf("%d ", ptr[i]);
        if ((i + 1) % c == 0)
        {
            printf("\n");
        }
    }
    return 0;}

但是当我进行此更改以将其切换为 char 矩阵时,它不会读取所有字符,因此它在矩阵完成之前停止读取

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

int main()
{
    int r , c  ;
    int count = 0, i;
    char *ptr,b;

    printf("ROWS ");
    scanf("%d",&r);
    printf("COLS ");
    scanf("%d",&c);
    ptr = (char *)malloc((r * c) * sizeof(char));

    for (i = 0; i < r * c; i++)
    {
        scanf("%c",&b);
        ptr[i] = b;

    }
    for (i = 0; i < r * c; i++)
    {

        printf("%c ", ptr[i]);
        if ((i + 1) % c == 0)
        {
            printf("\n");
        }
    }
    return 0;
}

标签: cmatrixcharmallocscanf

解决方案


看来你需要写

scanf(" %c",&b);
      ^^^^ 

跳过空白字符'\n',包括与按下的 Enter 键对应的换行符。

即当格式字符串从空格字符开始时,会跳过空格字符。

请注意,当不再需要动态分配的数组时,您应该释放分配的内存。

否则,如果您还想读取数组中的空格,则可以通过以下方式重写 for 循环

for (i = 0; i < r * c; i++)
{
    do scanf("%c",&b); while ( b == '\n' );
    ptr[i] = b;

}

推荐阅读