转义字符表
从表中可以看出,在C语言中有三种转义字符,它们是:一般转义字符、八进制转义字符和十六进制转义字符。
1. 一般转义字符
这种转义字符,虽然在形式上由两个字符组成,但只代表一个字符。常用的一般转义字符为:
\a \n \t \v \b \r \f \\ \’ \"
细心的读者可能已经发现,转义字符'\\'代表的反斜杠"\"、转义字符’\’’代表的字符"'"和转义字符'\"'代表的字符""",其本身就是可显示字符,为什么还要对它转义呢?
2. 八进制转义字符
它是由反斜杠'\'和随后的1~3个八进制数字构成的字符序列。例如,'\60'、'\101'、'\141'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的八进制值分别为60、101和141。
字符集中的所有字符都可以用八进制转义字符表示。
如果你愿意,可以在八进制数字前面加上一个0来表示八进制转移字符。
3. 十六进制转义字符
它是由反斜杠'\'和字母x(或X)及随后的1~2个十六进制数字构成的字符序列。例如,'\x30'、'\x41'、'\X61'分别表示字符'0'、'A'和'a'。因为字符'0'、'A'和'a'的ASCII码的十六进制值分别为0x30、0x41和0x61。
由上可知,使用八进制转义字符和十六进制转义字符,不仅可以表示控制字符,而且也可以表示可显示字符。但由于不同的计算机系统上采用的字符集可能不同,因此,为了能使所编写的程序可以方便地移植到其他的计算机系统上运行,程序中应少用这种形式的转义字符。
转义字符的使用
例:
void main()
{
int a,b,c;
a=5; b=6; c=7;
printf("%d\n\t%d %d\n %d %d\t\b%d\n",a,b,c,a,b,c);
}
此程序练习转义字符的使用:
a、b、c分别为整数5,6,7
调用printf显示程序运行结果:
5
67
56 7
程序在第一列输出a值5之后就是“\n”,故回车换行;接着又是“\t”,于是跳到下一制表位置(设制表位置间隔为8),再输出b值6和c 值7;后又是"\n",因此再回车换行;之后又输出a值5和b值6;再次后"\t"跳到下一制表位置(与上一行的6 对齐),但下一转义字符“\b”又使退回一格,故紧挨着6再输出c值7。
使用转义字符时需要注意以下问题:
1)转义字符中只能使用小写字母,每个转义字符只能看作一个字符。
2)\v垂直制表和\f换页符对屏幕没有任何影响,但会影响打印机执行响应操作。
3)在C程序中,使用不可打印字符时,通常用转义字符表示。
4)转义字符’\0’表示空字符NULL,它的值是0。而字符'0'的ASCII码值是48。因此,空字符’\0’不是字符0。另外,空字符不等于空格字符,空格字符的ASCII码值为32而不是0。编程序时,读者应当区别清楚。
5) 如果反斜线之后的字符和它不构成转义字符,则’\’不起转义作用将被忽略。
例如:
printf(“a\Nbc\nDEF\n”);
输出:
aNbc
DEF
6)转义字符也可以出现在字符串中,但只作为一个字符看待。
例 求下面字符串的长度
“\026[12,m” 长度为6
“\0mn” 长度为0。(想想:为什么不是2)
编写一个用于统计空格、制表符与换行符个数的程序
#include"stdio.h"
#include"stdlib.h"
//统计空格符、制表符和换行符的数目
void main()
{
long c;
long nt,nn,nb;
nt=0;
nn=0;
nb=0;
while((c=getchar())!='E')
switch(c)
{
case '\n':
++nn;break;
case '\t':
++nt;break;
case ' ':
++nb;break;
default:
break;
}
/*效率比较低的方法
if(c=='\n')
{
++nn;
}
else if (c=='\t')
{
++nt;
}
else if(c==' ')
{
++nb;
}*/
printf("指表符:%ld\n 换行符:%ld\n 空格符:%ld\n",nt,nn,nb);
system("pause");
}
getchar()可接受多个字符,直到按回车才返回,但是第一个字符作为函数的返回值
注意其和getch()的区别,getch()在你敲击键盘的时候就立即返回
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
//输入字符串,每行一个单词
#define IN 1
#define OUT 0
int word(int c)
{
int state=OUT;
if((c==' ')||(c=='\t')||(c=='\n'))
{
state=OUT;
}
else if(state==OUT)
{
state=IN;
}
return state;
}
void main()
{
int c;
int nc,nl,nw;
nc=0;
nl=0;
nw=0;
int state;
state=OUT;
static int count;
count=0;
while((c=getch())!='E')
{
state=word(c);
if(state==IN)
{
putch(c);
}
else
{
putch('\n');
}
}
//printf("换行符:%d\n 字符数:%d\n 单词数:%d\n",nl,nc,nw);
system("pause");
}