c primer plus中有这样一道程序,输入一个字符与两个数字,打印成阵
假设输入的是C 1 2
对于getchar与scanf的读取情况,我的理解是:
一行字符输入,回车。
ch=getchar 读取了C,进入while循环。
scanf读取 1 2 。
内循环getchar读取\n 。
结束。
对于这样的读取我理解为,输入一串字符,每读取一次就会把,读取的东西从原字符串删去,这样就方便开始下一次读取。但是,下一道程序让我有了疑惑,
这是验证输入的是否为数字的自定义函数,假设输入的是
apple 1
那么我的理解是 :
scanf读取apple,进入循环。
getchar读取 1 ,输出 1 is not a integer 。
但实际上,输出的是 apple 1 is not a integer 。
这就与我先前的理解出现了矛盾。
在scanf读取 apple 后,
内循环gerchar重新把scanf读取过的再读取了一次,
而不是我想象中的仅仅把scanf没读取掉的进行读取。
我后来又打了几个程序进行思考,但都是符合我的原来的想法的,所以这个程序到底为什么让getchar读取到scanf读取过的数据呢?不知是不是我悟性太差,我脑子就此打结了,所以在此寻求各位帮助,感谢