桓楠百科网

编程知识、经典语录与百科知识分享平台

C语言入门知识整理:字符串输入输出的3种形式

上次讲到字符串,这里要补充讲一下字符串的输入和输出。

字符串是由双引号括起来的若干字符,可以是一个字符,也可以是多个字符,甚至可以是0个字符。

C++有专门的字符串的数据类型,string。

如果定义一个字符串变量,可以用如下语法:

string a;

1定义

但C语言没有专门的字符串的数据类型,要用到字符串变量,必须用一维数组来定义。

语法格式:

char 数组名[数组长度];

比如:

char a[100], b[20];

2 初始化

字符数组的初始化有三种形式:

(1)和普通的一维数组的初始化一样,一个一个元素赋初值。如:

char t[5]={ ‘a’, ‘b’ ‘c’, ‘d’, ‘e’ };

(2)用字符串常量初始化:

char t[6]={ “abcde” };

注意这里数组t的长度为6,因为字符串”abcde“有一个默认的结束符,为’\0’,也就是说,字符串”abcde”的实际长度为6,包含6个字符:’a’、’b’、‘c’、’d’、‘e’、‘\0’,所以必须定义数组t的长度至少为6。

但字符串的”abcde”的有效长度为5,因为它的有效字符不包含最后的‘\0’。

字符数组的长度必须大于等于字符串的有效长度+1

(3)用字符串常量初始化,可去掉大括号:

char t[6]= “abcde” ;

注意这里数组t的长度必须大于等于6,因为字符串“abcde”的实际长度为6。

3 字符串输入输出

也有三种形式:

(1)一个一个字符输入输出

字符对应的格式控制符是%c

程序1:

这里是一个一个字符输入,最后输入回车时结束,同时给最后一个字符赋值为’\0’。这是为了以后循环时作为循环结束条件用。

运行结果:

有一个函数是专门用于输入字符的,即:getchar()

它的含义是输入一个字符。

语法格式:

变量名=getchar( );

如:

char a;

a = getchar( );

a=getchar()scanf(“%c”, &a)是一样的。

所以程序1中凡是出现scanf(“%c”, s[i])的地方,都可以改为:s[i]=getchar( )

用getchar()有更简洁的地方,程序1和以下程序2是一样的:

程序2:

(2)整体输入输出字符串,格式控制符是%s

如果有定义 char a[80];

则输入输出时可以整体输入输出,不需要一个一个字符处理。

输入: scanf(“%s”, a);

输出: printf(“%s”, a);

这里特别注意,用%s整体输入字符串时,字符数组变量a的前面没有&

运行结果:

注意:程序1和程序2还是有区别的,程序1是运行时等待用户输入一个回车才结束输入,同时回车键之前的字符都存放到字符数组里面了。

但是程序2是默认以空格作为输入结束符的,如果遇到空格,则空格前面的字符存放到字符数组中,自动加入字符串结束符’\0’。

比如输入的字符串是:ABC DEF HIJK,

则程序1的运行结果是:

程序2的运行结果是:

(3)整体输入输出字符串,用系统函数gets()和puts()

假设有定义:

char a[80];

则整体输入字符串的系统函数gets()语法格式为:

gets(a);

整体输出字符串的系统函数puts()语法格式为:

puts(a);

注意gets()和用%s输入不同的地方是:gets()以回车结束输入。

程序3:

运行结果:

初学者特别容易把getchar( )和gets( )搞混,而且很容易写成:

getchar(变量名)

这种形式。一定要注意:

getchar( )是输入一个字符,格式为:

变量名=getchar( );

gets( )是整体输入字符串,格式为:

gets(变量名);

常用的是整体输入字符串,但是一般会在输入后进行一些处理,此时需要一个一个字符处理,处理完毕后再整体输出或者根据具体情况输出结果。

我个人比较喜欢用gets()来输入字符串,但是输出经常用不到puts(),因为很多时候需要一个一个字符处理并输出。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言