我试图从1-5生成数字,使用for循环并显示它们的和。我的目标是有这样一个输出:
1 + 2 + 3 + 4 + 5 = 15
但相反,我得到了输出:
+ 1 + 2 + 3 + 4 + 5 = 15
#include <stdio.h>
void main()
{
int a, sum = 0;
for (a = 1; a <= 5; a++)
{
printf("+\t%d\t",a);
sum = sum + a;
}
printf("=\t%d", sum);
}发布于 2021-12-20 03:37:03
每当输出由某个值分隔的列表时,就会经常遇到这种情况。问题是,您有5个值要输出,但只有4个分隔符。如果您没有做任何特殊的事情,那么您将输出5个分隔符,这正是在您的示例中发生的情况。即使您将分隔符移到值后面,也会有太多的分隔符。
我更喜欢这样做:
for (a = 1; a <= 5; ++a)
{
if (a > 1) printf("\t+\t");
printf("%d", a);
sum += a;
}我更喜欢这种方法,而不是在循环之外输出一些值,因为输出的内容通常更复杂,可能涉及额外的计算或函数调用,而且我不喜欢重复该代码。
所以,我只输出一个分隔符,如果我知道我要输出另一个东西。这意味着,为每个循环迭代输出一个分隔符,但第一个循环除外。
我还喜欢使用前缀样式,因为通常循环中第一项的条件比最后一项的条件更简单。它还与涉及一个标志的另一种方法兼容:
int first = 1;
for (a = 1; a <= 5; ++a)
{
if (!first) printf("\t+\t");
first = 0;
printf("%d", a);
sum += a;
}还有许多其他方法可以看到这种模式的出现。而且可能有各种形式的优化,降低可读性。但这种方法很简单,很容易遵循。
发布于 2021-12-20 05:56:10
您可以将char类型的指针作为第一次迭代的分隔符分配给它,在打印第一个数字之后,将分隔符字符串分配给指针,以便在以后的迭代中在两个数字之间进行打印。
执行情况:
#include <stdio.h>
int main (void) {
int a, sum = 0;
char * str = "";
for (a = 1; a <= 5; a++) {
printf("%s%d\t", str, a);
sum = sum + a;
str = "+\t";
}
printf("=\t%d\n", sum);
return 0;
}输出:
# ./a.out
1 + 2 + 3 + 4 + 5 = 15附加信息:
void作为main()函数的返回类型并不符合标准。int.应该是main()函数的返回类型
https://stackoverflow.com/questions/70417109
复制相似问题