二维字符数组操作:深入理解输入与输出技巧
二维字符数组如何输入和输出
这样:
#include
intmain()
{
chara[3][20];
char*p;
inti;
p=a[0];//a[0]为列指针,p指向到第0行第0列的元素,p=a[0]+j指向第0行第j列中的元素。
for(i=0;i<3>
//for(i=0;i<3>
for(i=0;i<3>
;//第二个字符串的开头Die地址应该是a[0][0]移动20个字符后。
p是指向字符的指针
数组名代表列指针*(a+i),对应列指针a[i]
#include
intmain()
{
chara[3][20];
inti;
for(i=0;i<3>
//for(i=0;i<3>
对于(i=0;i<3>高级信息:
注意事项
对于输入二维数组,一般情况下,当然可以一次输入一行,但最好一次输入一行。
所以逐行输入:
for(inti=0;i scanf("%s",perNum[i]); 对于输入,%c用于单次输入,%s用于一行输入。 在一种情况下,每个输入行需要存储18个数字,因此我们的想法是建立一个18列的二维数组。 charperNum[100][18]; 那么此时输入输出的代码为: charperNum[100][18]; intN; scanf("%d",&N); for(inti=0;i \tscanf("%s",perNum[i]); for(inti=0;i \tprintf("%s\n",perNum[i]); 其中,第一行的2给出的是该二维数组中的行数。 这时候发现输入没有问题,但是逻辑上输出应该是2行18列。 问题是output是根据换行符\0来判断是否输出行的。 所以这里的改进就是在二维数组中至少多增加一列来存储换行符。 所以代码改为: charperNum[100][19];//18以上的一位数字存放换行符 intN; scanf("%d",&N); for(inti=0;i \tscanf("%s",perNum[i]); for(inti=0;i \tprintf("%s\n",perNum[i]);
但是,我注意到第一行的输出也输出第二行的输入。
但是,由于指定的列数只有18,只保存输入,因此没有空间存储换行符(\0)。c++二维数组输入输出问题
cin>a[i][100];每个字符串都有一个字符,而这个for循环只能转换输入字符串的顺序,先输入后输出。