需要修改输出

问题描述 投票:0回答:3

我想打印出某个范围内存在的股息及其总和。假设我给出了 15 到 85 之间的范围并打印能被 4 整除的数字。它工作得很好。但我想要特定形状的输出,例如“ 16 + 32 + 48 + 64 + 80 = 240。 我面临的问题是,当我用 printf 语句打印“+”时,+ 符号也会出现在最后一个输出之后,例如 80 +。这是错误的。请引导我完成它。 当前输出为:16 + 32 + 48 + 64 + 80 + =240

 #include <stdio.h>
#include <conio.h>
int main()
{
int first=0;
int second=0;
printf("Enter first number :");
scanf_s("%d",&first);
printf("Enter second number :");
scanf_s("%d",&second);
first++;
int sum=0;
while(first<=second)
{
    if(first%4==0 && first%16==0)
    {
        printf("%d  ",first);
        printf("+ ");
        sum+=first;
    }
    first++;
}
printf("  =%d ",sum);
}
c output operator-keyword
3个回答
1
投票

不要考虑接下来会发生什么,为可能发生的事情做好准备。

我对您的代码进行了两项带注释的更改:

char *connect = ""; // a connection string used soon
while(first<=second)
{
    if(first%4==0 && first%16==0)
    {
        printf( "%s%d", connect, first );
        connect = " + "; // if another value output, this prints first
        sum += first;
    }
    first++;
}
printf("  = %d ",sum);

保持 OP 代码的总体外观/感觉,以下提供了改进措施。提供给任何可能认为值得研究的人。

#include <stdio.h>

int main( void )
{
    for( ;; ) { // infinite loop
        int first;
        printf( "Enter first number:" );
        scanf_s( " %d", &first );

        // Users ALWAYS cooperate and scanf() ALWAYS works as intended
        // check of scanf() return value omitted for brevity

        int second = first - 1;
        while( second <= first ) {
            printf( "Enter second number (>%d):", first );
            scanf_s( " %d", &second );
        }

        int interval = 0; // acts like modulo
        while( interval < 2 ) {
            printf( "Enter interval (2+):" );
            scanf_s( " %d", &interval );
        }

        first += interval - (first % interval);
        // Or, one alternative start value
        // first += interval - ( first % interval );

        int sum = 0;
        char *connect = ""; // Answering OP problem of printing
        while( first <= second )
        {
            printf("%s%d", connect, first );
            connect = " + "; // subsequent numbers prefixed by " + "
            sum += first;
            first += interval;
        }

        printf( " = %d\n", sum );
    }

    return 0;
}

输出:

Enter first number:-170
Enter second number (>-170):90
Enter interval (2+):42
-126 + -84 + -42 + 0 + 42 + 84 = -126
Enter first number:38
Enter second number (>38):300
Enter interval (2+):42
42 + 84 + 126 + 168 + 210 + 252 + 294 = 1176

0
投票

编辑:然后

#include <stdio.h>

int main(void)
{
    int first=0;
    int second=0;

    printf("Enter first number :");
    scanf("%d",&first);

    printf("Enter second number :");
    scanf("%d",&second);

    int sum=0;
    int start=0;
    while(first<=second)
    {
        if(first%16==0)
        {
            if(start) printf("+ ");
            start=1;
            printf("%d ", first);
            sum+=first;
        }
        first++;
    }
    printf("= %d ",sum);

    return 0;
}

0
投票

找到一个解决方案。也就是这样打印总和:

print("\b\b= %d",sum);

+号将在最后一次股息输出时打印。所以我们可以使用转义序列在控制台中移回。在这种情况下,我们使用“”向后移动两次。

© www.soinside.com 2019 - 2024. All rights reserved.