首页 理论教育 C语言程序设计:字符型数组的输入输出

C语言程序设计:字符型数组的输入输出

时间:2023-10-29 理论教育 版权反馈
【摘要】:输入时不受字符数组长度的影响,可以突破字符串的长度。

C语言程序设计:字符型数组的输入输出

数组与循环是分不开的,对于数值型数组,一维数组通常用单层循环处理,二维数组和嵌套循环相关。对于字符型数组则既可以和数值型数组一样,固定次数循环,也可以不固定次数循环,以′\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;

请仔细分析一下执行过程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈