二维字符数组如何输入和输出
如果要读入的字符要按行读入, 包含 中间的空白字符也要读入,而不是跳过,那么用 gets() 一次读一行为好。考虑字符串结束符 \0 要一个单位存放,开数组时,要开大一点。
#include
int main( )
{
char a[5][6];
int x,y;
for (x=0;x<5;x++) gets(a[x]);
for (x=0;x<5;x++) printf("%s
",a[x]);
return 0;
}
这是完整程序,每行5个字符或短于5个字符。一次读一行。读完5行后输出。
str[i][20]是一个字符,不是字符串了,现在是输入字符串;
可以将str[i],看成是一个字符串名,就像char a[20] 中的a一样,这样就好理解了。
如果输入单个字符是用getchar(),这个函数
这样:
#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
",a[i]);
for (i=0;i<3;i++)printf("%s
",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
",*(a+i));
for (i=0;i<3;i++)printf("%s
",*(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
",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
",perNum[i]);
原理:二维字符数组相当于一个一维数组(每个元素就是个字符串)。
输出二维字符数组,等于输出一个一维的字符串数组。
实现代码如下:
#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]);
}
}
你的输入、输出语句都是错的,完成程序修改如下:
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]);
}
多个字符串的输入输出
#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));
}
个人看法 如果是赋给a[i][j]的话应该是%c吧
C语言如何输入输出多维字符串数组问题
直接 printf("%s \\n", str[0]);printf("%s \\n", str[1]);printf("%s \\n", str[2]);
C语言二维字符数组的 输入输出 以及调用的标准格式
void main(){ int i;char name[3][20]; \/\/是你定义的数组不对,[a][b] a代表你要输入个名字个数,b代表你输入的名字长度 for(i=0;i<3;i++){ scanf("%s",&name[i]);} printf("输出:\\n");for(i=0;i<3;i++){ printf("%s\\n",name[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...
C++怎么用cin输入二维字符数组?
C++编程语言中,使用cin输入二维字符数组有两种主要方法。第一种是输入字符串方式,适用于每一行均为字符串的情况。可以使用cin>>a[n]的形式输入,每次输入为数组的一行。例如,定义二维数组char a[10][100];,当输入为数组的一行时,可以采用如下代码:cin>>a[0];。这种方式适用于需要输入多个字符...
二维字符数组怎么输入输出
如果要读入的字符要按行读入, 包含 中间的空白字符也要读入,而不是跳过,那么用 gets() 一次读一行为好。考虑字符串结束符 \\0 要一个单位存放,开数组时,要开大一点。include<stdio.h> int main( ){ char a[5][6];int x,y;for (x=0;x<5;x++) gets(a[x]);for (x=0;x<5;x...
二维数组输入输出字符怎么读走空格?
在 C++ 中,可以使用 cin 和 cout 来输入和输出字符数组。如果要读取整个字符串(包括空格),可以使用 getline() 函数。例如,下面的代码演示了如何定义一个字符类型的二维数组,输入字符串,并将其输出:上述代码中,cin.getline() 函数会读入整行字符串,包括其中的空格。如果需要去掉字符串中的空格...
c++中 怎么便捷的把字符输入到一个一维数组中呢?
从键盘上输入一个字符串到一维字符数组中,另外再输入一个字符,在字符数组中删除所有 从键盘上输入一个字符串到一维字符数组中,另外再输入一个字符,在字符数组中删除所有该字符(即指定字符),程序输出完成删除操作后的结果字符串。提示:利用for循环找到指定字符,将指定字符找到,然后“赋值覆盖”,最...
C语言字符型二维数组用scanf和gets如何输入,举个例谢谢
include <stdio.h> int main(){ char s[3][20];int i;printf("输入第一行:");gets(s[0]);printf("输入第二行:");scanf("%s",s[1]);for(i=0;i<2;i++){ printf("%s\\n",s[i]);} return 0;}
C++二维数组的输入和输出
int main(){ int m,n,i,j;int **x;scanf("%d%d",&m,&n);x=(int **)malloc(sizeof(int *)*m);for(i=0;i<m;i++){ x[i]=(int *)malloc(sizeof(int)*n);} for(i=0;i<m;i++){ for(j=0;j<n;j++){ scanf("%d",&x[i][j]);} } for(i=0;i<m;i++){...
通过键盘给3*4的二维数组输入数据,然后分别按行和按列输出数组元素.
输完字符后按回车键输出3*4的字符,多于12的字符部分将被忽略。include<stdio.h> void main(){ char a[3][4];for(int i=0;i<3;i++)for(int j=0;j<4;j++){a[i][j]=getchar();\/\/等同于scanf("%c",\/\/&a[i][j]);} for( i=0;i<3;i++){ for(int j=0;j<4;j++...