如何删除最后一个数字中的逗号?
Posted
技术标签:
【中文标题】如何删除最后一个数字中的逗号?【英文标题】: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(",");
【问题讨论】:
【参考方案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);
换句话说:
-
无需在每次迭代时检查
i < num1
上次迭代时无需检查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。 (好吧,它的草稿很晚。)以上是关于如何删除最后一个数字中的逗号?的主要内容,如果未能解决你的问题,请参考以下文章