加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C语言中的字符数组输入和输出

(2010-11-22 13:59:15)
标签:

c语言

字符数组

【一、声明】

例如:“char a[5],b[2][3];”等

 

【二、赋值】

字符数组的赋值方式可以分为两类:逐一赋值 && 使用字符串常量赋值

(1)逐一赋值(I)和(II)为正确赋值方式

(I)char a[5]={'a','b','c','d','e'};  (√)
(II)char a[5]={'a','b','c'};    (√)

//此时前三个元素分别为a,b,c,没有被赋值的元素被默认赋值为\0

(III)char a[5]={'a','b','c','d','e','f'};(×)
采用(I)==>

http://s5/middle/44c0724ex959e112338c4&690

采用(II)==>

http://s2/middle/44c0724ex959e149acec1&690

(III)是错误的赋值方式(数组元素的个数大于数组的大小)

http://s6/middle/44c0724ex959e185c1955&690

(2)使用字符串常量赋值(此时,系统会自动在字符串的末尾添加'\0',以表示字符串结束)

(I)char b[]="abcde"; (√)

(II)char b[6]="abcde"; (√)

(III)char b[6]={"abcde"}; (√)

(IV)char b[5]="abcde"; (×)

采用(I)(II)和(III)将得到:

http://s9/middle/44c0724ex959e2fd11bc8&690

(IV)是错误的赋值方式(数组元素个数实际为6<包含了一个'\0'>,而数组的大小只有5)

http://s9/middle/44c0724ex959e3545bc88&690


【三、字符数组的输入】

(1)逐个字符输入,例如

 char a[5];
 for(int i=0;i<5;i++)
 {
   scanf("%c",&a[i]);   //注意:不能少了地址符&
  //a[i]=getchar();
 }

(2)采用scanf函数输入,例如

 char a[5];
 scanf("%s",a);       //注意:不能添加地址符&,因为数组名本身即为地址

注意:

(1) a前面没有地址符&
(2) 采用scanf输入,一旦遇到空格OR回车OR制表符等,即表示输入结束。如我们从键盘上输入 ab cde,那么数组a的值为:ab

(3)采用gets函数输入,例如

  char a[5];
  gets(a);

注意:

采用gets()函数输入,仅在遇到回车时,才表示输入结束。如我们从键盘上输入ab cde,则输入a的值为:ab cde


【四、字符数组的输出】

http://s4/middle/44c0724ex959e5e6c39c3&690

为什么会出现上述输出结果呢?

原因:采用逐一方式赋值时,系统不会自动添加'\0'来表示字符串结束。


http://s16/middle/44c0724ex959e7b574a2f&690

由于采用字符串常量赋值方式时,系统会自动添加'\0'来表示字符串结束,故可以避免上述问题。

 

附加字符串拼接程序(不使用strcat函数)

#include <stdio.h>
#define ARRAYSIZE 30

void main()
{
 int i=0,j=0;
 char a[ARRAYSIZE],b[ARRAYSIZE],c[2*ARRAYSIZE];
 printf("Enter the value of array a:");
 gets(a);
 printf("Enter the value of array b:");
 gets(b);
 while (a[i]!='\0')
 {
  c[i]=a[i];
  i++;
 }
 while (b[j]!='\0')
 {
  c[i]=b[j];
  j++;
  i++;
 }
 c[i]='\0';     //此句不能少!
 printf("Combine a and b will get:");
 puts(c);
   
}

 

 

希望对大家有所帮助http://www/uc/myshow/blog/misc/gif/E___6726EN00SIGG.gif


 










 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有