串列必須顯示此“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(",");
}
uj5u.com熱心網友回復:
只有在列印數字時才需要列印逗號,所以把它放在同一個if.
for(i = 1; i <= num1; i) {
if(num1 % i == 0){
printf("%d",i);
if(i<num1)
printf(",");
}
}
uj5u.com熱心網友回復:
問題是您,甚至在列印未通過檢查的數字
固定的:
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");
uj5u.com熱心網友回復:
或者比上面更有效:
for (i = 1; i < num1; i) {
if (num1 % i == 0) {
printf("%d,",i);
}
}
printf("%d",num1);
換句話說:
- 無需
i < num1在每次迭代時檢查 - 不需要
num1 % i == 0在最后一次迭代時檢查
uj5u.com熱心網友回復:
為了避免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
uj5u.com熱心網友回復:
這是使用三元運算子的非常簡短的版本:
#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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/400319.html
