在c中创建一个char的动态矩阵
Create a dynamic matrix of char in c
我想创建一个动态矩阵来输入一个字符,所以我先创建一个动态矩阵 int 到 switch it to 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;
}
看来你需要写
scanf(" %c",&b);
^^^^
跳过白色 space 字符,包括对应于按下的 Enter 键的换行符 '\n'
。
也就是格式字符串从space字符开始时白色space字符被跳过。
注意当不再需要动态分配的数组时,应释放分配的内存。
否则如果你还想读取数组中的 spaces 那么你可以用下面的方式重写 for 循环
for (i = 0; i < r * c; i++)
{
do scanf("%c",&b); while ( b == '\n' );
ptr[i] = b;
}
我想创建一个动态矩阵来输入一个字符,所以我先创建一个动态矩阵 int 到 switch it to 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;
}
看来你需要写
scanf(" %c",&b);
^^^^
跳过白色 space 字符,包括对应于按下的 Enter 键的换行符 '\n'
。
也就是格式字符串从space字符开始时白色space字符被跳过。
注意当不再需要动态分配的数组时,应释放分配的内存。
否则如果你还想读取数组中的 spaces 那么你可以用下面的方式重写 for 循环
for (i = 0; i < r * c; i++)
{
do scanf("%c",&b); while ( b == '\n' );
ptr[i] = b;
}