【问题标题】:How to remove the comma in the last number?如何删除最后一个数字中的逗号?
【发布时间】:2021-12-30 15:31:42
【问题描述】:

列表必须显示“1,2,3,4”,但在这段代码中显示为“1,,2,,,3,,,4” 这段代码有什么问题?

for (i = 1; i <= num1; ++i) {
    if(num1 % i == 0)
        printf("%d",i);
    if(i<num1)
        printf(",");
}

【问题讨论】:

    标签: c comma


    【解决方案1】:

    只有在打印数字时才需要打印逗号,所以把它放在同一个if中。

    for(i = 1; i <= num1; ++i) {
          if(num1 % i == 0){
              printf("%d",i);
              if(i<num1)
                printf(",");
          }
    }
    

    【讨论】:

    • 成功了。非常感谢!!
    • 请不要只写代码答案。解释问题的原因以及应该如何解决。我们不是调试服务。
    【解决方案2】:

    问题是您正在打印,,即使是未通过检查的数字

    固定:

    for (i = 1; i <= num1; ++i) {
        if (num1 % i == 0) {
            printf("%d", i);
            if (i < num1)
                printf(",");
        }
    }
    
    printf("\n");
    

    以上依赖于通过检查的最后一个元素。因为是这样,所以可以简化为:

    for (i = 1; i < num1; ++i) {
        if (num1 % i == 0) {
           printf("%d,", i);
        }
    }
    
    printf("%d\n", num1);
    

    但是,一般来说,您不能依赖最后一个通过检查的数字。以下是一种更通用的方法,不依赖于通过检查的最后一个数字:

    const char *prefix = "";
    for (i = 1; i <= num1; ++i) {
        if (num1 % i == 0) {
           printf("%s%d", prefix, i);
           prefix = ",";
        }
    }
    
    printf("\n");
    

    【讨论】:

      【解决方案3】:

      或者比上面更有效:

      for (i = 1; i < num1; ++i) {
          if (num1 % i == 0) {
              printf("%d,",i);
          }
      }
      printf("%d",num1);
      

      换句话说:

      1. 无需在每次迭代时检查i &lt; num1
      2. 上次迭代时无需检查num1 % i == 0

      【讨论】:

        【解决方案4】:

        为了避免 if 或条件运算符 (?:),我通常只打印循环外的第一项

        printf("1");                       // 1
        for (i = 2; i <= num1; ++i) {                             // note: start at 2
            if (num1 % i == 0) {
                printf(", %d", i);         // , 2, 3, 4, ..., n
            }
        }
        printf("\n");                      // newline
        

        【讨论】:

          【解决方案5】:

          这是一个非常简短的版本,使用三元运算符:

          #include <stdio.h>
          
          int main(void) {
              int num1=24;
              
              for (int i = 1; i <= num1; ++i)
                  printf((num1%i)? "": "%d%s", i, (i<num1)? "," : "");
              
              return 0;
          }
          

          输出:

          Success #stdin #stdout 0s 5660KB
          1,2,3,4,6,8,12,24
          

          【讨论】:

          • 致破坏我答案的人,称其为条件运算符。不,它被称为三元运算符 (syntaxdb.com/ref/c/…) alternate 名称是“三元条件”运算符。 “条件运算符”是它的简写俚语。
          • 就像你不可靠的来源一样,你错了。它被称为conditional operator。它是a三元运算符,是C语言的only三元运算符,但它被称为条件运算符。将其称为三元运算符就像将加法称为二元运算符。
          • 无论如何,编辑的目的是使代码更具可读性,因为您必须滚动才能看到它。我刚刚解决了这个问题,因为我已经解决了你的答案的问题。否则我不会更改它,因为它被广泛称为三元运算符,即使这不是它的名字。但修复错误不会造成破坏。
          • 抱歉,该链接是针对 C++ 的。 Correct link。和from the actual C spec。 (好吧,它的草稿很晚。)
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多