c - 在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;
}
解决方案
看来你需要写
scanf(" %c",&b);
^^^^
跳过空白字符'\n'
,包括与按下的 Enter 键对应的换行符。
即当格式字符串从空格字符开始时,会跳过空格字符。
请注意,当不再需要动态分配的数组时,您应该释放分配的内存。
否则,如果您还想读取数组中的空格,则可以通过以下方式重写 for 循环
for (i = 0; i < r * c; i++)
{
do scanf("%c",&b); while ( b == '\n' );
ptr[i] = b;
}
推荐阅读
- node.js - 如何在 mongodb atlas 中使用 mongoose 创建 ttl 索引?
- mysql - 创建临时表作为 select union all 在 MySQL 5.6.17 中不起作用,但在 MySQL 8 中起作用
- node.js - Readstream 返回无法处理错误事件,即使它存在
- html - 无序列表项彼此不对齐
- json - 从 base64 解密不同级别的相同密钥的值
- gitlab-ci - 为什么不仅:更改在我的 Gitlab CI yml 中不起作用?
- api - 为 Web 应用程序集成线路消息 API
- c++ - 使用带有本机 Linux AIO 示例的 iovec 异步复制文件
- java - 如何使用 Swagger Codegen 生成 Jersey Rest Api 项目
- ios - 如何创建到本地 Swift 包的符号链接