。scanf对空白字符空格、换行符、制表符等的处理规则是有区别的。✅ 会忽略前导空格的情况对于绝大多数格式说明符scanf在读取数据前会自动跳过所有前导空白字符。这包括%d,%f,%lf等数值类型%s字符串类型不会忽略前导空格的情况%c是一个重要的例外。它会读取输入流中的下一个字符无论这个字符是不是空白字符。示例如果你输入一个字符后按回车缓冲区中会包含该字符和一个换行符\n。连续使用%c时换行符也会被当作一个有效字符读取。如何让%c跳过空白字符你可以在格式字符串中显式地添加一个空格来匹配并忽略任意数量的空白字符。总结%d,%f,%s等自动跳过前导空白字符。%c不会跳过空白字符会原样读取。 %c通过在格式符前加空格可以强制跳过前导空白字符。当你使用scanf(%s, ...)读取字符串时自动跳过前导空白scanf会先忽略掉开头所有的空格、制表符Tab或换行符直到遇到第一个非空白字符才开始读取。遇到空白即停止一旦开始读取它会一直读下去直到再次遇到下一个空白字符空格、Tab、换行等为止。这个终止的空白字符不会被存入字符串中而是留在输入缓冲区里。当scanf使用%s读取字符串时它一旦遇到空格、制表符或换行符就会认为“这个词”结束了。动作停止读取。结果这个导致停止的空白字符比如那个空格或换行符没有被消耗掉它依然老老实实地待在输入缓冲区里等着下一次处理。2. 下一次读取阶段自动忽略前导空白当你进行下一次scanf(%s, ...)调用时动作scanf会先执行“跳过前导空白”的逻辑。结果它会读取缓冲区里刚才剩下的那个空格或换行符发现是空白字符于是直接丢弃/跳过继续往后看直到遇到下一个非空白字符才开始真正读取新的字符串。