数组与循环是分不开的,对于数值型数组,一维数组通常用单层循环处理,二维数组和嵌套循环相关。对于字符型数组则既可以和数值型数组一样,固定次数循环,也可以不固定次数循环,以′\0′作为循环条件。因此,字符数组的输入输出可以有两种方法:
1.用格式符“%c”逐个输入输出数组元素
【例5.12】输入输出数组元素。
程序内容如下:
1 #include<stdio.h>
2 int main()
3 {
4 char c[7];
5 int i;
6 for(i=0;i<7;i++)
7 scanf("%c",&c[i]);
8 for(i=0;i<7;i++)
9 printf("%c",c[i]);
10 return 0;
11 }
程序结果如图5.13所示:
图5.13 例5.12程序结果图
【例题中关键问题说明】
(1)执行“for(i=0;i<7;i++)scanf("%c",&c[i]);”时,正确的数据输入是一次输入7个或7个以上的字符,然后回车。若输入的数据不足,则读取已输入的数据,并且把回车也作为一个字符数据读取,然后继续等待输入。
(2)可以在printf()函数中用格式符“%c”来输出,也可以用putchar()函数输出,但一般用循环语句(如for语句)编程。
需要注意:在输入时字符与字符之间没必要额外加空格,空格要占用一个字节的存储空间,除非要输入的数据原来就有空格,否则,将会得到你不想要的结果。比如在上例中,想要的结果是“Teacher”,那么就输入“Teacher”;如果输入“T e a c h e r”,那么得到的结果就变成了“T e a c”。
2.用格式符“%s”来实现字符串的输入输出
有了字符串结束标志的规定后,用格式符“%s”输入输出一个字符串就变得非常简单。
例如字符串的输出:
char c[]="teacher";
printf("%s",c);
执行时将输出“teacher”,它相当于:
int i=0;
char c[]="teacher";
while(c[i]!=′\0′)
{
printf("%c",c[i]);
i=i+1;
}
用“%s”格式输出字符串时,输出内容是字符数组的名字。在C语句中,数组名表示系统分配给数组存储单元的首地址。“printf("%s",c);”表示就是从地址c单元开始输出一个字符串(即按“%c”格式输出到′\0′为止)。
例如:
char c[10];
scanf("%s",c);(www.xing528.com)
printf("%s",c);
执行结果如下:
teacher
teacher
执行“scanf("%s",c);”时,将读取从键盘输入到键盘缓冲区中的一个字符串(空格或回车结束一串字符),送到地址c开始的内存单元中去。
需要注意:
(1)由于数组名代表数组的起始地址,因此在c前面不能再加取址运算符“&”。如写作“scanf("%s",&c);”则是错误的。
(2)输入时,空格或回车作为一个字符串的结束。
如执行“scanf("%s",c);”时输入“tea cher”,则数组c得到的是“tea”,并在最后自动加上字符串结束标志′\0′。
(3)输入时不受字符数组长度的影响,可以突破字符串的长度。
如执行时输入“abc123456789”,将从地址c开始存放这个字符串,并在最后加上′\0′。输出时当然输出的是“abc123456789”,但数组c仅存放了前10个字符。
(4)如果用一个scanf()函数输入多个字符串,在输入时用空格分开。
例如:
char a[10],b[10];
scanf("%s%s",a,b);
输入时两个字符串用空格分开,或用回车,即:
teacher student
或
teacher
student
(5)如果一个字符数组中包含一个以上的′\0′,则遇到第一个′\0′时输出结束。如:
char c[8]={′a′,′b′,′c′,′\0′,′d′,′e′};
printf("%s",c);
数组的状态为:
输出的结果为:abc。
用“%s”格式输入字符时较难以理解,初学者要认真分析,多上机试验。也可以将“scanf("%s",c);”的执行过程理解为:
int i=0;
char a,c[10];
while((a=getchar())!=′\n′||a!=′′)
{
c[i]=a;
i=i+1;
}
请仔细分析一下执行过程。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。