scanf()和gets()读取字符串的区别
主要的差别在于它们如何决定字符串何时结束
scanf()更基于获取单词(get word)而不是获取字符串(get string);
gets()会读取所有的字符,直到遇见第一个换行符为止。
scanf()使用两种方法决定输入结束。
如果使用%s格式,字符串读到(但不包括)下一个空白字符(比如空格、制表符或换行符)
如果指定了字段宽度,比如%10s,scanf()就会读入10个字符或者直到遇见第一个空白字符,由二者中最先满足的那一个终止输入
注:无论哪种上述哪种方法,字符串都是以遇到第一个非空白字符开始
gets()读取字符串直到遇见到一个换行符(\n)输入结束
注:gets()读取换行符之前(不包括换行符)的所有字符,在这些字符后添加一个空字符(\0)
fgets()读取字符串直到遇见到一个换行符(\n)输入结束
注:fgets()与gets()相比,有三点不同
需要第二个参数来说明最大读入字符数,如果这个参数值为n,fgets()会读取最多n-1个字符或者读到换行符,由二者中最先满足的那一个终止输入
如果fgets()读到换行符,就会把它存到字符串里,而不是像gets()那样丢弃它。
它还需要第三个参数来说明读取哪一个文件。从键盘上读取数据时,可以使用stdin作为该参数
空白字符 & 空字符
空白字符是指在屏幕上不会显示出来的字符(如空格,制表符,回车换行)
空字符是指'\0',或者也称为字符编码为0的字符