Estoy tratando de imprimir los elementos de una matriz separados por comas.
Mi salida:
5,6,7,8,9,Necesito deshacerme de la última coma, ¿alguien sabe cómo hacerlo?
#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]); } }En realidad, este es un patrón frecuente en la programación: tiene una secuencia de elementos y desea hacer algo tanto para cada elemento como para cada par de elementos consecutivos, es decir, para cada espacio entre elementos consecutivos.
De todos modos, aquí hay algunas opciones:
Aquí tienes un ejemplo para tu caso de la primera opción:
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]); }Notas:
elements es un nombre confuso (te hace pensar que variable tiene los elementos reales), lo reemplacé con num_elements .Se recomienda cambiar el separador después de imprimir.
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"); } Tenga en cuenta que esto funciona bien incluso si los elements == 0 y no necesita ningún bloque if() especial o declaraciones ?: .
Desarrollando la respuesta de einpoklum, así es como lo haría (opción 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); }Esto tiene la ventaja de:
j permanece local para el bucle for (esto es posiblemente menor pero sigue siendo una ventaja)