特点及注意事项
- 按格式读取:根据格式控制字符串中的格式控制符来确定要读取的数据类型和格式,必须严格按照格式输入数据,否则可能导致读取错误。
- 空白字符处理:在读取输入时,对于空白字符(空格、制表符、换行符等)的处理方式因格式控制符而异。比如 %d 、 %f 等在读取时会自动跳过前面的空白字符,而 %c 则不会跳过空白字符,会直接读取遇下一个
- 缓冲区问题: scanf 有输入缓冲区的概念。当输入的数据多于 scanf 本次要读取的数据时,多余的数据会留在缓冲区中,可能会影响下一次的输入操作。例如,如果先输入 10 20 ,然后用 scanf("%d", &num1); 读取一个整数,只会读取到 10 , 20 就留在缓冲区中,下一次再用 scanf 读取数据时,可能会先读取到 20 而不是预期的新输入数据。
- 安全性:和 gets 函数类似, scanf 在读取字符串(使用 %s 格式控制符)时,没有对输入长度进行限制,容易导致缓冲区溢出的问题,所以在读取字符串时要格外小心,可以考虑使用 fgets 等更安全的函数来代替。