字符串(String):
一串字符,即若干个字符构成的一个序列
C语言中没有字符串类型,只能用字符数组表示字符串,为了方便对字符串的处理,C语言提供了很多简化写法
C语言规定,一个合法的字符串的最后一个字符必须为'\0',即'\0'为字符串结束标志
char a[5]={'j','h','u','n'};
char b[5]={"jhun"};
在执行标准输入(比如调用scanf或getchar)时,我们键入的字符在我们按下回车键后会进入标准输入缓冲区中,scanf这些函数只是从这个缓冲区中取走相应类型的数据,如果调用函数时这个缓冲区中没有任何数据,这些函数会等待用户按键输入;如果缓冲区中有数据,但不是scanf函数所期望类型的数据,那么scanf函数就会立即失败返回,否则会直接取走相应的数据,不会等待
类型强行转换:
(类型)
int a=8;
char b;
b=a;
指针类型转换:
不同基类型指针可以任意转型
void型指针可以用来表示一切类型的指针(一切皆空),void*和其他类型指针之间可以自动转型
清空缓冲区
scanf(“%c”)
在数据输入时,如果输入有误,往往需要清空缓冲区,以保证下次输入的准确可靠。
在Linux系统中,有时会惯性思维,使用在Windows程序设计中常用的方法:
(1)fflush(stdin):
fflush()函数,不是标准c库中的,只是标准c的扩展,所以在Linux中,不行。
(2)rewind(stdin):
这个函数是将指针指向流的开始位置,但它是文件io中的一个函数,操作的是FILE型流。在Linux中不行。
(3)getchar():
while(getchar()!=’\n’)
;
通过读取stdin中的剩余数据并丢弃,来清空缓冲区。getchar()一次读一个字符,在Linux中,可行!
(4)setbuf(stdin,NULL):
通过调用函数,直接将缓冲区清空(置空或指空)。在Linux中可行!(一次性)
(5)fgets():
char zmx[1024];
fgets(s,1024,stdin);
在linux 中,可行的方案,只有(3)、(4)、(5)
小结:
重点说明字符串(字符数组)
关于scanf和printf对于字符输入输出的一点小缺陷,scanf的 %c 在输入时会将回车也当做字符,printf %s 输出时会以 ‘\0’ 位结束标志,如果在字符串中人为的加上 ‘\0’ ,那么这个人为加上的’\0’后面的字符串将无法正常显示。
Linux下清空缓冲区:
1、通过getchar():
while(getchar()!=’\n’)
;
2、setbuf(stdin,NULL):
通过调用函数,直接将缓冲区清空(置空或指空)。在Linux中可行!(一次性)
3、通过fgets():
char zmx[1024];
fgets(s,1024,stdin);