二维字符数组如何输入和输出

main(){chara[2][15];inti,j;for(i=0;i<2;i++)for(j=0;j<strlen(a[i]);j++)scanf("%s",&a[i... main()
{char a[2][15];
int i,j;
for(i=0;i<2;i++)
for(j=0;j<strlen(a[i]);j++)
scanf("%s",&a[i][j]);

for(i=0;i<2;i++)
for(j=0;j<strlen(a[i]);j++)
printf("%s",a[i][j]);
为什么无法输出呢到底那里错了
展开
 我来答
大野瘦子
高粉答主

2019-10-22 · 繁杂信息太多,你要学会辨别
知道小有建树答主
回答量:1227
采纳率:100%
帮助的人:33.5万
展开全部

这样:

#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++)

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

for(int i= 0;i < N;i++)

printf("%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++)

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

for(int i= 0;i < N;i++)

printf("%s\n",perNum[i]);

慎重还可靠灬宝贝f
推荐于2017-10-05 · TA获得超过12.9万个赞
知道大有可为答主
回答量:1.9万
采纳率:52%
帮助的人:2582万
展开全部
原理:二维字符数组相当于一个一维数组(每个元素就是个字符串)。
输出二维字符数组,等于输出一个一维的字符串数组。
实现代码如下:
#include<stdio.h>
void main()
{
int i;
char name[2][25];
for(i=0;i<2;i++)
{
scanf("%s",&name[i]);
}
printf("输出:\n");
for(i=0;i<2;i++)
{
printf("%s\n",name[i]);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光上的桥
推荐于2017-10-05 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65806
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
你的输入、输出语句都是错的,完成程序修改如下:

main()
{
char a[2][15];
int i,j;
for(i=0;i<2;i++) scanf("%s",a[i]);

for(i=0;i<2;i++) printf("%s",a[i]);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-07-18
展开全部
多个字符串的输入输出
#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));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太太我想
2018-11-21
知道答主
回答量:3
采纳率:0%
帮助的人:2764
展开全部
个人看法 如果是赋给a[i][j]的话应该是%c吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式