scanf()如何检查输入是整数还是字符?

vja*_*n27 5 c scanf

我想知道当字符本身只是一个数字时,标准C库函数scanf()检查输入是整数还是字符时我们调用scanf("%d",&var)?我知道当它遇到一个非整数时,它会把它放回输入缓冲区并返回-1但是它怎么知道输入不是整数?

pou*_*def 4

你是对的,每个字符实际上都表示为 8 位整数。解决方案很简单:查看该数字,看看它是否在 48-57 范围内,这是字符“0”-“9”的 SCII 代码范围。

scanf() 从源代码的第 1315 行开始,我们可以看到它的实际效果。scanf()但实际上更复杂 - 它还查看多字节字符来确定数值。第 1740 行是奇迹发生的地方,该字符实际上被转换为数字。最后,这可能是最有用的,该strtol()函数通过循环来执行该转换。