C编程:从前缀和代码结果删除不必要的逗号



我最近在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;
}

相关内容

  • 没有找到相关文章

最新更新