如何获得打印的每个输入的总和?
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
))
检查一下,如果您还有其他问题(以及我是否正确解释了您的问题),请告诉我。如果您确实需要输入每个值以求和,请告诉我,我很乐意进一步提供帮助。
我是 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
))
检查一下,如果您还有其他问题(以及我是否正确解释了您的问题),请告诉我。如果您确实需要输入每个值以求和,请告诉我,我很乐意进一步提供帮助。