8.3.3 字符数组的输入和输出
在采用字符串方式后,字符数组的输入、输出将变得更加简单方便。在C语言中,字符数组有如下两种的输入、输出方法。
1.使用“%c”逐个输出
除了前面介绍的字符串赋初值方法外,还可用printf函数和scanf函数一次性输出或输入一个字符数组中的字符串,而不必使用循环语句逐个地输入或输出每个字符。例如:
char str [9]; sacnf("%c, &str[0]");
使用printf函数可以输出一个或几个数组元素。例如:
printf ("%c", str[0]);
2.使用“%s”逐串输出
使用如下格式可以依次输入一个字符串。
scanf ("%s", str);
例如:
char s1[25]; scanf("%s", s1); /*用字符数组接收字符串时必须写字符数组名*/
如果键盘输入为:
12345 97890
然后按Enter键并换行,则s1中的字符串为:
12345
如果键盘输入为:
1234597890
然后按Enter键并换行,则s1中的字符串为:
1234597890
执行下面的代码:
char s2[25]={"12345"}; printf("%s", s2); /*输出字符数组时字符串也应写成字符数组名*/
输出结果为:
12345
执行下面的代码:
char s3[25]={'1', '2', '\0', '3', '4', '5'}; printf("%s", s3);
输出结果为:
12
虽然在s3中’\0’后还有字符,但是用“%s”格式只能输出到字符串结束标记。
实例8-5
提示用户输入两个字符串,然后输出较大者
源码路径daima\8\8-5
字符串大小比较的规则是:字符串从前向后逐字符进行比较,若字符大则字符串就大,例如abc小于cbc。如果长度不相同,但是前面字符相同,则长的字符串大,例如abc小于abce。本实例的实现文件为“bijiao.c”,具体实现代码如下。
#include"stdio.h" int main(void){ char a[80], b[80], jibie=' '; /*置标记jibie为空格符*/ int i=0; /*置开始的下标为0*/ printf("string1:"); scanf("%s", a); /*输入第1个字符串并存入数组a*/ printf("string2:"); scanf("%s", b); /*输入第2个字符串并存入数组b*/ while((a[i]! ='\0')||(b[i]! ='\0')) /*当前字符有一个’\0’则退出循环*/ { if(a[i]<b[i]) { jibie='b'; break; } /*b字符串大则设标记’b’退出循环*/ else if(b[i]<a[i]) { jibie='a'; break; } /*a字符串大则设标记’a’退出循环*/ else i++; /*当前字符相等则修改下标后继 续循环*/ } if(jibie==' ') /*由于当前字符为’\0’而退出循环的, 则短字符串为小*/ if(a=='\0') jibie ='b'; /*a串短,b串大,设置标记为’b'*/ else jibie='a'; /*b串短,a串大,设置标记为’a'*/ if(jibie=='a') printf("big-string: %s\n", a); else printf("big-string: %s\n", b); getch(); }
拓展范例及视频二维码
范例8-5-01:下三角的问题
源码路径:演练范例\8-5-01\

范例8-5-02:二维数组每一行的最大值
源码路径:演练范例\8-5-02\

程序运行后先提示用户输入两个字符串,输入完毕并按下Enter键后将比较这两个字符串的大小,并输出长度较大的字符串,如图8-5所示。

图8-5 运行结果