指定了%d来读取一个整数,scanf()函数开始每次读取一个输入字符,它跳过空白字符(包含空格、制表符和换行符)直到遇到一个非空白字符,并期望发现一个数字字符或者一个符号(+或者-)。
如果发现一个数字或符号,那么就保存并读取下一个字符;如果接下来的字符是一个数字,再保存,继续读取。如此持续直到遇到一个非数字字符,此时函数认为:已经读到了整数的末尾。
scanf会将这个非数字字符放回输入缓冲区。这意味着:下一次程序开始读取输入时,仍将从这个非数字字符开始。如果使用多个%d读取整数,但是不小心在中间输入了非数字字符,那么除了非数字字符之前对应的变量外,后面的变量将不会被赋值。
也就是说如果遇到非数字字符,scanf("%d")是会自动忽略的,且认为读入已经结束了,如果是给数组赋值,非数字字符之后的空间其实都没有被成功赋值,如果数组定义在主函数外,那么空间最开始都是为0的,没有被赋值的空间仍然为0,但如果数组定义在主函数内,未被赋值的空间输出来也有值,只不过是一些不知道是什么的数字。
C语言使用%d读入字符会发生什么
最新推荐文章于 2023-01-27 17:09:11 发布