scanf()和gets()读取字符串的区别

主要的差别在于它们如何决定字符串何时结束

scanf()更基于获取单词(get word)而不是获取字符串(get string);

gets()会读取所有的字符,直到遇见第一个换行符为止。


scanf()使用两种方法决定输入结束。

  1. 如果使用%s格式,字符串读到(但不包括)下一个空白字符(比如空格、制表符或换行符)

  2. 如果指定了字段宽度,比如%10s,scanf()就会读入10个字符或者直到遇见第一个空白字符,由二者中最先满足的那一个终止输入

注:无论哪种上述哪种方法,字符串都是以遇到第一个非空白字符开始


gets()读取字符串直到遇见到一个换行符(\n)输入结束

注:gets()读取换行符之前(不包括换行符)的所有字符,在这些字符后添加一个空字符(\0)


fgets()读取字符串直到遇见到一个换行符(\n)输入结束

注:fgets()与gets()相比,有三点不同

  1. 需要第二个参数来说明最大读入字符数,如果这个参数值为n,fgets()会读取最多n-1个字符或者读到换行符,由二者中最先满足的那一个终止输入

  2. 如果fgets()读到换行符,就会把它存到字符串里,而不是像gets()那样丢弃它。

  3. 它还需要第三个参数来说明读取哪一个文件。从键盘上读取数据时,可以使用stdin作为该参数



空白字符 & 空字符

空白字符是指在屏幕上不会显示出来的字符(如空格,制表符,回车换行)

空字符是指'\0',或者也称为字符编码为0的字符