I'm trying to print the elements of an array separated by commas.
My output:
5,6,7,8,9,
I need to get rid of the last comma, anyone know how to do that?
#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]);
}
}
This is actually a frequent pattern in programming: You have a sequence of elements, and you want to do something both for every element and for every pair of consecutive element, i.e. for every gap between consecutive elements.
Anyway, here are a few options:
Here's an example for your case of the first option:
void print_array(int integers[], size_t num_elements)
{
if (num_elements == 0) { return; }
for(size_t j = 0; j < num_elements - 1; j++){
printf("%d,", integers[j]);
}
printf("%d", integers[num_elements - 1]);
}
Notes:
elements is a confusing name (it makes you think that variable has the actual elements), I replaced it with num_elements.Recommend to change the separator after printing.
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");
}
Notice this works well even if elements == 0 and does not need any special if() blocks or ?: statements.
Elaborating on einpoklum's answer, this is how I would do it (option 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);
}
This has the advantage of:
j stays local to the for-loop (this is arguably minor but still a plus)