二维字符数组怎么用%s输入

如题所述

二维字符数组是一种数据结构,可以用来存储多行多列的字符数据。在 C 语言中,可以使用如下的方式来定义一个二维字符数组:

char arr[m][n];

其中,m 和 n 分别表示二维数组的行数和列数。

如果要使用 s 输入一个二维字符数组,可以使用如下的代码:

scanf("%s", arr[i]);

其中,i 表示二维数组的行下标。

也可以使用以下代码来实现二维字符数组的 s 输入:

for (int j = 0; j < n; j++) {
scanf(" %c", &arr[i][j]);
}

其中,j 表示二维数组的列下标。

需要注意的是,在使用 scanf 函数输入字符数组时,要加上空格,以便于 scanf 函数正确识别输入的字符串。

例如,如果要输入一个 3 行 4 列的二维字符数组,可以使用如下的代码:

char arr[3][4];
for (int i = 0; i < 3; i++) {
scanf("%s", arr[i]);
}

或者

char arr[3][4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
scanf(" %c", &arr[i][j]);
}
}

这样就可以使用 s 输入一个二维字符数组了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-20
百度知道
二维字符数组如何输入和输出
查看全部1个回答
信必鑫服务平台
TA获得超过1.1万个赞
这样:
#include<stdio.h>
int main()
{
char a[3][20];
char *p;
int i;
p=a[0];//a[0]为列指针,p指向0行0列元素,p=a[0]+j指向0行j列元素。
for (i=0;i<3;i++)gets(a[i]);
// for (i=0;i<3;i++)printf("%s\n",a[i]);
for (i=0;i<3;i++)printf("%s\n",p+i*20); //指针寻址
;//第二个字符串开始的地址,应该是a[0][0]后移20个字符的地方。p是指向字符的指针
}
数组名表示列指针*(a+i)等价于a[i]列指针
#include<stdio.h>
int main()
{
char a[3][20];
int i;
for (i=0;i<3;i++)gets(*(a+i));//列指针*(a+i)和a[i]等价
// for (i=0;i<3;i++)printf("%s\n",*(a+i));
for (i=0;i<3;i++)printf("%s\n",*(a+i));
}
扩展资料:
注意事项
对于二维数组的输入,一般是一行一行的输入,当然也可以一个个来,但最好的还是一行一行的输入。
所以一行一行的输入:
for(int i= 0;i< N;i++)
scanf("%s",perNum[i]);
对于输入,单个输入用的是%c,而一行来输入就是%s。
而有一个情况,此时输入每行都是要存18个数字,所以想法就是设二维数组的时候,列数就是18。
char perNum[100][18];
那这个时候输入输出代码:
char perNum[100][18];
int N;
scanf("%d",&N);
for(int i= 0;i< N;i++)
\tscanf("%s",perNum[i]);
for(int i= 0;i< N;i++)
\tprintf("%s\n",perNum[i]);
其中,第一行的2,是说明这个二维数组的行数。
这个时候发现,输入没问题,但输出的时候,按理来说,应该是2行18列。可是发现第一行的输出把第二行的输入也一起输出了。
这个问题在于,输出的时候,是根据\0,即换行符号判断是否要换行输出。但由于设定的列数才18,刚刚好只把输入给存完,这样子就没有地方存换行符(\0)。
所以这里的改进就是,把二维数组的列数至少多一位,用于存放换行符。
所以代码改为:
char perNum[100][19];//比18多一位,存放换行符
int N;
scanf("%d",&N);
for(int i= 0;i< N;i++)
\tscanf("%s",perNum[i]);
for(int i= 0;i< N;i++)
\tprintf("%s\n",perNum[i]);
回答于 2022-11-16
相似回答