C语言里while和scanf的搭配使用问题

今天遇到一个题,需要用C语言写1到10的阶乘问题。
要求用for或者是while循环
我就尝试用while循环
突然想到一种写法,但是不能完全正确输出答案。源代码如下:

img

测试结果:

img


请教为啥会出现这种问题

i 和 sum 要初始化一下

img

sum要在 while 循环开始的地方初始化为1,否则每次循环,sum都会不断增加

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7667881
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C语言 scanf格式输入函数,在输入字符时出现问题的解决
  • 除此之外, 这篇博客: 【C语言】解决C语言题目中的多组输入问题中的 三、缓冲区和scanf读取 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.
    scanf里面输入的时候,分割数字,用空格或者回车都是可以达到相同的效果的,不是说只有回车才是结束录入的标志,gets()以回车符作为字符串的终止符,同时将回车符从缓冲区读走,但不作为字符串的一部分。scanf()以空格、回车、制表符作为字符串的终止符,不读走空格、制表符、回车符,仍留在缓冲区中。

    2.
    实际上在C++语言中的cin和scanf是一样的,他们在读取缓冲区中的字符的时候,一旦遇到空格或换行符,则直接过滤并且不会将他们拿出来,然后直到读取完缓冲区的字符为止。

  • 您还可以看一下 张景平老师的C语言零基础入门(计算机二级考试)课程中的 06-16 scanf函数特殊用法小节, 巩固相关知识点