c语言学习笔记
1.scanf、gets、fgets、getchar与\n、\0
这些函数在输入字符串的时候对换行符’\n'
和'\0'
的处理。
-
getchar()
- 输入缓冲区顺序读入一个字符(包括空格、回车和Tab)
- 运行到此函数扫描缓冲区,取走一个字符,若有取走一个,执行下一台条语句,没有的话等待键盘输入。
- 返回值是接收的字符。
-
gets(str)
- 从输入缓冲区中读取字符串存储到字符指针变量 str 所指向的内存空间.
- 可以直接输入带空格的字符串
- 遇到换行符结束
- 把换行符从缓冲区中取出来,直接抛弃,不存在存储到的字符串中
- 在扫描到的字符串后面添加上字符串结束标志
\0
。
-
scanf()
- %s接收字符串一次,不包括键盘中输入的空格。
- 就相当与运行到scanf语句的时候,需要从键盘上输入字符,其中可以包括空格,当按回车也就是换行符的时候结束本次输入,把本次输入的字符串包括最后的换行符放在缓冲区,scanf开始扫描缓冲区,遇到字符就接受,遇到空格和换行符(常用的,其他的没有尝试)就停止,并在接收的字符串后面加上
\0
(标准的字符串结束字符)。 - 遇到的空格和换行符不做处理,留在缓冲区。
-
fgets()
- 函数原型
char *fgets(char *restrict str, int size, FILE *restrict stream))
- 例子1
fgets(a, 4, stdin);
例子2FILE *fp; fgets (str, 60, fp)
- 当系统调用这个函数的时,系统便会阻塞等待用户的输入,直到用户输入回车符
\n
才返回程序。然后用户输入的内容会被系统放进输入缓存区里面,fgets()函数便会进来读取其“第二个参数减1”个字节存进它第一个参数指向的内存地址中 - 如果在还没读取够需要的字节大小前读取到换行符
\n
则提前返回. - 需要读取的流中已经没有数据了也返回
- 预留1个字符的空间来存储字符串结束符
\0
. - 会将
\n
也当作一个字符,存在指定位置。 fgets()
只负责读取,并不会事先清空参数1指向的地址内存。读取到的字节会覆盖原地址储存,但没有覆盖到的内容还是保持原样。fgets()
读取键盘输入的时候,如果输入多于其“第二个参数减1”个字符大小的数据,fgets()
只会读取走前”第二个参数减1”个字符,多余的字符残留在输入缓存区里面。
- 函数原型