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

C语言程序设计:字符串的输入输出

【摘要】:例4.7输出一个形如“丰”字的图形。图4.4例4.7输出结果从例4.7可知,逐个字符的输出,使用的格式符是“%c”;以字符串整体一次输出,使用的格式符是“%s”。例如下面的写法就是错误的:printf;如果数组长度大于字符串的实际长度,也只输出’\0’前的字符。其余的空格和回车符都被作为字符串的分隔符。

1.字符数组的输出

用printf() 函数输出字符数组元素,既可以使用格式符“%c”逐个字符的输出,也可以使用格式符“%s”将字符数组中存放的字符串整体输出。

例4.7 输出一个形如“丰”字的图形。

程序输出结果如图4.4所示。

图4.4 例4.7输出结果

从例4.7可知,逐个字符的输出,使用的格式符是“%c”;以字符串整体一次输出,使用的格式符是“%s”。

在用“%s”输出整个字符串时,要注意以下几点:

(1)输出时系统要检测字符串结束符’\0’,一旦遇到’\0’就结束输出操作,并且不输出字符串的结束标志’\0’字符。

(2)printf()函数中的输出项是字符数组名,而不是数组元素名。例如下面的写法就是错误的:

printf(“%s”,a[0]);

(3)如果数组长度大于字符串的实际长度,也只输出’\0’前的字符。例如:

char a[15]=“Good”;

printf(“%s”,a);

程序只输出“Good”4个字符,而不是15个(数组长度)字符,在遇到’\0’便结束输出。

(4)若一个字符数组中包含了多个’\0’,则遇到第一个’\0’就结束输出。例如:

运行程序时,屏幕显示:

you

由运行结果可知,在第一个’\0’后面的内容不会被输出。

2.字符数组的输入

与输出函数printf()类似,可以用格式符“%c”或“%s”向字符数组输入字符或字符串。

(1)使用“%c”格式符向字符数组逐个输入字符。

程序运行时,如果输入字符串“TC程序设计”,则屏幕显示如下:

请输入一个字符串:TC程序设计

数组a中存放的字符是:TC程序

数组b中存放的字符是:study

数组a的长度是6,显然输入的字符数大于字符数组a的长度,因此数组a只存放前6个字符。其他的字符存放在数据缓冲区中,供以后的输入函数使用。不过,实际使用时应该避免出现输入字符数大于数组长度的情况,以免其他变量得到不想要的数据。

(2)使用“%s”格式符向字符数组输入字符串。

(www.chuimin.cn)

程序运行时,如果输入字符串“TC程序设计”,则屏幕显示如下:

请输入一个字符串:TC程序设计

数组a中存放的字符是:TC程序设计

数组b中存放的字符是:设计

从显示信息可以看出:输入的字符不仅占用了数组a的存储空间,而且占用了数组b的存储空间,影响了数组b中存放的数据。因此,使用这种方法给数组元素赋值时,应该避免出现输入字符数大于数组长度的情况,以免破坏相邻存储空间的数据。

注意:在scanf()函数中使用格式符“%c”时,输入项就是字符数组元素,并且需要加地址符“ & ”,如 & a[i];如果在scanf()函数中使用格式符“%s”,输入项就是字符数组名,且不能在其前加地址符“ & ”,因为数组名就代表了相应字符数组在内存中的存储地址。例如:

char s[10];

scanf(“%s”,& s); /*输入项 & s就是错误的。*/

在scanf函数中使用格式符“%s”输入字符串时,输入的前置空格将被系统自动删除。其余的空格和回车符都被作为字符串的分隔符。因此,如果输入的字符串中间含有空格,系统就把输入的字符按空格分成多个字符串。如:

main( )

{

char a[20],b[20],c[20];

printf(“请输入字符串:”);

scanf(“%s”,a);

scanf(“%s%s”,b,c);

printf(“数组a:%s\n”,a);

printf(“数组b:%s\n”,b);

printf(“数组b:%s\n”,c);

}

运行程序时,如果输入“I am fine”,幕显示如下:

请输入字符串:I am fine

数组a:I

数组b:am

数组c:fine

屏幕显示信息说明:系统是把“I”“am”“fine”都作为字符串处理,而不是把输入的“I am fine”作为一个字符串处理。这是因为scanf()函数中使用格式符“%s”输入字符串时,系统自动默认以空格或回车键作为字符串的分隔符。若要输入包含有空格的字符串,应采用格式符“%c”,逐个地将字符赋给字符数组中的元素。例如:

运行程序时,如果输入“we are happy”,屏幕显示如下:

请输入字符串:we are happy

数组a:we ar

数组b:e

数组c:happy

从程序中,我们可以知道要将数组a中的字符元素转换为一个完整的字符串,应在其结束位置加入’\0’的字符串结束标志。这样,数组a中的字符串就可以包括空格字符了。