如何获得打印的每个输入的总和?

how to get sum of each input printed?

我是 C 的新手,需要一些关于这个基本程序的帮助。我希望程序在输入后直接打印出总和。我试图将 printf("..%d", sum); 放在 for 括号内,但程序在第一次输入后关闭。如果我在 For 之前和 for 括号内有一个 scanf("%d", &value);,它会起作用,但是 for 我没有得到我想要的格式。 我希望值垂直打印,左侧应该是输入,右侧应该是输出,如图所示。

这是我的代码

#include <stdio.h>
int main()
{
    int  sum = 0, c, value;
    scanf("%d", &value);

    for (c = 1; c <= value; c++)
    {
        sum = sum + c;
        printf("..%d", sum);
        scanf("%d", &value);
    }

    return 0;
}

看来您对实际求和的值有点困惑(或者我...)从您的问题描述(以及您如何初始化 for 循环)看来您是输入结束值,然后是从 1 到该值的总和?

如果是这种情况,则不需要在 for 循环中进行额外输入,您的循环变量提供了您应该添加到总和中的所有值。

此外,您无法正确使用任何用户输入功能,除非您验证return以确定输入是否成功或失败。

总而言之,你可以这样做:

#include <stdio.h>

int main()
{
    int  sum = 0, c, value;
    
    fputs ("sum from 1 to: ", stdout);                      /* prompt for input */
    
    if (scanf ("%d", &value) != 1 || value < 1) {           /* VALIDATE EVERY INPUT !!! */
        fputs ("  error: invalid integer input or negative value.\n", stderr);
        return 1;
    }
    putchar ('\n');                             /* add newline before output */
    
    /* you are looping over the values of c -- no input is necessary */
    for (c = 1; c <= value; c++)
    {
        sum = sum + c;                          /* sum */
        printf ("%2d\t\t\t%d\n", c, sum);       /* output value added and sum */
    }

    return 0;
}

例子Use/Output

$ ./bin/suminput
sum from 1 to: 5

 1                      1
 2                      3
 3                      6
 4                      10
 5                      15

或 1-10:

$ ./bin/suminput
sum from 1 to: 10

 1                      1
 2                      3
 3                      6
 4                      10
 5                      15
 6                      21
 7                      28
 8                      36
 9                      45
10                      55

或者如果提供的输入无效:

$ ./bin/suminput
sum from 1 to: twenty
  error: invalid integer input or negative value.

或负值:

$ ./bin/suminput
sum from 1 to: -10
  error: invalid integer input or negative value.

没有造成伤害。


输入求和

我读取示例输入和输出的另一种方式(以 0 结束循环为特征)是,您的任务只是读取输入并对它们求和,直到用户输入 0(或无效整数)显示每次输入后的总和。这要容易得多——但验证每个输入的要求保持不变,例如

#include <stdio.h>

int main()
{
    int  sum = 0, value;
    
    while (scanf ("%d", &value) == 1 && value != 0) {    /* input value */
        sum += value;                                    /* sum */
        printf ("%20d\n", sum);                          /* output sum */
    }
}

例子Use/Output

$ ./bin/suminput2
1
                   1
2
                   3
3
                   6
4
                  10
5
                  15
0

或输入 0 之前的任何随机值:

$ ./bin/suminput2
1
                   1
-2
                  -1
3
                   2
-4
                  -2
5
                   3
-6
                  -3
0

(注意:有一些方法可以将输入和输出放在同一行,但这在编译器和操作系统之间有所不同。Windows 可以使用非标准的 getch(),而在 Linux 您需要通过使用 tcsetattr() 将输入更改为非规范模式来做同样的事情。另一种方法是简单地保存输入直到用户输入 0 然后循环所有值输入求和并显示值(尽管这会消除示例输入中输入显示末尾的 0))

检查一下,如果您还有其他问题(以及我是否正确解释了您的问题),请告诉我。如果您确实需要输入每个值以求和,请告诉我,我很乐意进一步提供帮助。