今天在做一道计算n的阶乘的题时,使用scanf语句读取输入的数据n时出现了一些问题,导致n恒赋值为1,下面是我这次学习的过程和对这次学习的思考与心得。
下图是我刚开始做题时的写的代码
不论输入多少,返回值始终是1
后来查阅了一下scanf语句的用法,终于发现了问题所在
一开始我直接用用n接收了scanf语句的返回值,以为其返回值就是所输入的数值。
但其实scanf返回值的定义是这样的:
返回值scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF
也就是说,scanf返回的是成功读入的项数,此时只有一个%d成功读取,故其返回值为1,然后将1赋给了前面的n,继而导致在后面的for循环中a<=n的条件只满足一次。随后multi被赋值为1,循环直接跳出,最后导致打印的结果恒为1。
所以形如n = scanf(“%d”,&n)这样的代码,在此时实在是多此一举。
其实要想把输入的数值赋给n,直接如图调用scanf语句即可实现,而不需要再去接收其返回值。
这样就能顺利的解决这道阶乘的求算题。