我最近在C中制作了一组数字的代码,直到零(零结束数字(并打印其前缀总和:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, sum;
sum = 0;
while(x)
{
scanf("%d", &x);
sum += x;
if(x != 0)
{
printf("%d,", sum);
}
else{
break;
}
}
return 0;
}
如果我要键入2 3 5 7 11 0
:它将打印以下内容:
2,5,10,17,28,
我想知道如何通过数字28
删除逗号或将逗号添加到数字直到最后一个数字?
我首选的解决方案,适用于问题中的代码,是:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int sum = 0;
int x;
const char *pad = ""; /* Or put a prefix here */
while (scanf("%d", &x) == 1 && x != 0)
{
sum += x;
printf("%s%d", pad, sum);
pad = ","; /* Or use ", " if you prefer */
}
putchar('n');
return 0;
}
请注意,此代码不会在第一次迭代中测试非初始化的变量x
(与问题中的代码不同(,并且检查scanf()
在使用该值之前是否成功(与问题中的代码不同(。这些是您应该采取的常规预防措施。可以调整代码以跟踪在行上打印了多少个字节(printf()
的返回值是多少?(,并安排pad
包含"n"
(而不是COMA,或者如果需要",n"
,则在所有线的末尾,除最后一个(时,当线"太长"时。
也请注意,如果您在程序中键入数字,则输出会变得凌乱。如果该程序是从内置的数字列表中读取的,或者是从文件中读取的,那么您将获得良好的输出。
您可以使用以下方法:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x = 0;
int sum = 0;
int i = -1;
int ret;
while(1)
{
i++;
ret = scanf("%d", &x);
if(ret != 1)
break;
sum += x;
if(x != 0)
{
if(i == 0)
printf("%d", sum);
else
printf(",%d", sum);
}
else
{
break;
}
}
printf("n");
return 0;
}
输出:
1
2
3
0
1,3,6
除了第一个值之外,打印逗号。它不是优雅,但可以工作。
if(x != 0)
{
if(sum == x) // On the first pass, sum == x
printf("%d", sum);
else
printf(",%d", sum);
}
当然,如果您有负值,这可能会破裂。在这种情况下,保持计数器或布尔会更好。
仅在第一次迭代(使用自定义标志(之后打印逗号,无论如何打印结果:
int first_iteration = 1;
...
if (!first_iteration)
{
printf(",");
}
sum += x;
first_iteration = 0;
printf("%d", sum);
总是有笨拙但尝试过的方法:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, sum;
sum = 0;
comma = 0;
while(x)
{
scanf("%d", &x);
sum += x;
if(x != 0)
{
if (comma != 0)
{
printf(",");
}
printf("%d", sum);
comma = 1;
}
else{
break;
}
}
return 0;
}