【问题标题】:Simple program that adds numbers from user从用户添加数字的简单程序
【发布时间】:2012-03-13 19:39:50
【问题描述】:

我正在尝试编写一个简单的程序,它使用 scanf 从用户输入 5 个数字并将它们加在一起。这是我到目前为止的代码..

  int main()   
    {

    int i;  
    int j=1;  
    int k=1;

            for (i=1; i<= 5; i++)
            {
                  scanf("%d\n", &j);
                  k = k+j;
            }   
            printf("%d\n", k);
    }

但是当我运行程序时会发生以下情况:

1  
2  
3  
4  
5  
5  
16

基本上,它要求我输入第六个数字(显然,我只需要 5),它还会在最终结果中加一。 (1+2+3+4+5=15)。

对此有任何想法。我在某个地方犯了一个简单的错误吗?

【问题讨论】:

  • 你从k=1开始,而不是k=0
  • 为什么要在scanf 调用中添加换行符?

标签: c scanf


【解决方案1】:

正如其他人所说,您错误地初始化了k,但我怀疑导致您出现问题的原因是您使用的是scanf("%d\n", &amp;j); 而不是scanf("%d", &amp;j);scanf() 忽略匹配前的空格。

【讨论】:

    【解决方案2】:

    最初是k = 1。然后将数字12345 添加到它。它们总和为1+1+2+3+4+5,即16

    您通常应该考虑初始化变量。

    • i 不需要在 for 循环之前初始化。
    • j 不需要初始化,因为它会从输入中读取。
    • k 需要正确初始化。但既然它有特定的用途,你应该称它为sum 而不是k。而且总结的时候应该以0开头。

    此外,您应该检查对scanf 的调用是否成功。在这种情况下,函数返回1

    if (scanf("%d", &j) == 1) {
      sum += j;
    } else {
      fprintf(stderr, "Invalid input.\n");
      break; /* exit the for loop. */
    }
    

    【讨论】:

      【解决方案3】:

      您似乎将 k(这是您保存总和的数字)初始化为 1,然后将所有其他数字添加到其中。试试这个:

      int k = 0;
      

      相反。

      然后,当你这样做时 k = k+j

      第一次,k 将为 0,而不是 1。你也不需要 j=1。

      也就是说,您也可以使用 k = k +j 的快捷方式;

      k += j;
      

      C 程序员不得不大量使用这种模式,以至于他们专门为这种模式构建了一个快捷方式。

      在你的 for 循环中,C 中的约定是从零开始,并且也可以工作到

      for (i = 0; i < 5; i++)
      

      我不知道为什么它会要求额外的时间,但请尝试将您的循环设置为这样,看看它是否有效。

      【讨论】:

        【解决方案4】:

        这就是你想要的,k 初始化为 0 并进行 scanf 输入,而没有 \n 这是一个结束线:

        int main() {
            int i;  
            int j=0;  
            int k=0;
            for (i=1; i<= 5; i++){
                scanf("%d", &j);
                k = k+j;
            }   
            printf("%d\n", k);
        }
        

        【讨论】:

        • 感谢大家的帮助!
        • 没有。没有第 6 次迭代。从程序显示int k = 1; 的那一刻起,额外的1 就在k 中。
        【解决方案5】:

        '\n' 字符是不必要的。我怀疑你混淆了你的 printf 和 scanf 语法:P

        【讨论】:

          猜你喜欢
          • 2016-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-27
          相关资源
          最近更新 更多