我正在嘗試列印以逗號分隔的陣列元素。
我的輸出:
5,6,7,8,9,
我需要去掉最后一個逗號,有人知道怎么做嗎?
#include <stdio.h>
#include <stdlib.h>
void print_array(int integers[], int elements);
int main(){
int arr[5] = {5, 6, 7, 8, 9};
print_array(arr, 5);
return 0;
}
void print_array(int integers[], int elements){
int j;
for(j=0; j<elements; j ){
printf("%d,", integers[j]);
}
}
uj5u.com熱心網友回復:
這實際上是編程中的一種常見模式:您有一個元素序列,并且您希望對每個元素和每對連續元素(即連續元素之間的每個間隙)都做一些事情。
無論如何,這里有幾個選項:
- 迭代除最后一個之外的所有元素(知道它們都有后續元素),分別處理最后一個
- 分別處理第一個元素,然后在第一個元素之后迭代所有元素(知道它們都有前一個元素)。
- 迭代所有元素,但檢查你是否在最后一個元素
- 迭代所有元素,使用布林值來記住您何時已經超過第一個元素(即,當您發現它為假時設定布林值)。
- 迭代所有元素,就好像它們都有一個后續元素一樣,然后執行糾正操作以撤消最后不存在的后續元素對上的作業。
這是第一個選項的示例:
void print_array(int integers[], size_t num_elements)
{
if (num_elements == 0) { return; }
size_t j = 0;
for(; j < num_elements - 1; j ){
printf("%d,", integers[j]);
}
printf("%d", integers[j]);
}
筆記:
- 使用這種模式完全避免代碼重復是很棘手的。
elements是一個令人困惑的名稱(它讓您認為該變數具有實際元素),我將其替換為num_elements.- 關于 C 的類似問題:如何列印以逗號分隔的元素串列?
uj5u.com熱心網友回復:
建議列印后更換分隔符。
void print_array(const int integers[], int elements) {
const char *separator = "";
for(int j=0; j<elements; j ) {
printf("%s%d", separator, integers[j]);
separator = ",";
}
printf("\n");
}
請注意,即使elements == 0不需要任何特殊的if()塊或?:陳述句,這也能很好地作業。
uj5u.com熱心網友回復:
詳細說明 einpoklum 的答案,這就是我的做法(選項 3):
#include <stdio.h>
#include <stdbool.h>
void print_array(int integers[], size_t num_elements) {
for(size_t j = 0; j < num_elements; j ) {
bool is_last_element = (j 1) == num_elements;
printf("%d", integers[j]);
if (!is_last_element) {
printf(",");
}
}
}
int main(void) {
int ints[4] = {1,2,3,4};
print_array(ints, 4);
}
這樣做的好處是:
- 我們不必檢查零元素。
- 計數器變數
j保持在 for 回圈的本地(這可以說是次要的,但仍然是一個優點) - 沒有代碼重復
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/442175.html
上一篇:“ORA-14400:插入的磁區鍵未映射到任何磁區”即使在表上設定了范圍間隔N
下一篇:了解macOS的分段錯誤錯誤
