【问题标题】:How can I add a + as a String using C Language?如何使用 C 语言将 + 添加为字符串?
【发布时间】:2022-01-21 19:01:04
【问题描述】:

我正在尝试使用 for 循环生成 1-5 的数字并显示它们的总和。我的目标是得到如下所示的输出:

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);       
    }

【问题讨论】:

  • 如果你打印 + 你做的第一件事,那么 + 首先结束。

标签: c loops sum generate


【解决方案1】:

每当输出由某个值分隔的列表时,都会经常遇到这种情况。问题是您要输出 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;
}

您可以通过许多其他方式看到这种模式的发生。并且可能有各种形式的优化它会降低可读性。但这种方法简单易行。

【讨论】:

    【解决方案2】:

    您可以获取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() 函数的返回类型不符合标准。 main()函数的返回类型应该是int

    【讨论】:

    • 我喜欢这个;更紧凑,printf("%s%d\t", a == 1 ? "" : "+\t", a)
    • @Neil 更紧凑的解决方案,循环中只有一个语句 - printf("%s%d\t", a == 1 ? "" : "+\t", (sum = sum + a, a));.... :)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多