Hola, estoy empezando a programar con C y me he atascado en un problema aparentemente sencillo.
Consiste mostrar los elementos de un vector por pantalla entre corchetes "[...]" y separados por coma (,) mediante la función 'escribirVector' que recibe un vector constante y un valor entero n (este representa el número de elementos reales del vector).
La verdad es que no tengo ni idea. Mi código conciste en esto:
void escribeVector(const Vector v, int n){
int i;
for(i=0; i<n; i++){
printf("[%lf]\n", v[i]);
}
}
Que claro está mal, me devuelve n veces la cadena [Elemento].
¿alguna sugerencia para conseguir el resultado que busco ([e[0],e[1], ... ])?
Casi lo tienes, solo hay que realizar cambios menores a la función. En pseudocodigo:
1) Imprimir '['
2) (Bucle) Imprimir los primeros N-1 elementos (N == numero de elementos del array) en la forma "i, ".
3) Imprimir el ultimo elemento (si existe) seguido del carácter ']'.
No es difícil, lo resuelves en unos minutos.
Un saludo
¿Algo como esto?:
[[1],[2],[3],[4],[5]]
Por si te sirve de ayuda:
printf("[");
for(i=0; i<5; i++)
printf("[%i],", v[i]);
printf("\b]\n");
El "\b" es para retroceder y que se coma la última coma, vamos que no termine en coma.
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Cita de: leosansan en 2 Mayo 2014, 20:00 PMEl "\b" es para retroceder y que se coma la última coma, vamos que no termine en coma.
Otra forma es imprimir el primero y despues ir imprimiendo coma + numero:
printf("[[%i] ",v[0]);
for(i=1; i<5; i++)
printf(",[%i]", v[i]);
printf("]\n");
A mí personalmente lo de retroceder no me gusta.
Cita de: amchacon en 2 Mayo 2014, 20:04 PM
Otra forma es imprimir el primero y después ir imprimiendo coma + numero:
....................
A mí personalmente lo de retroceder no me gusta.
Es justo lo contrario a lo que proponía rir3760, imprimir desde el primero hasta el penúltimo, y el último aparte.
Mi propuesta es la más coherente, no imprime ninguno por separado. :laugh:
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Hola, gracias a todos.
Finalmente con lo que me dijo rir3760 hice este codigo:
void escribeVector(const Vector v, int n){ //n = tamaño real del vector v
int i;
printf("[");
for(i=0; i<n; i++){
if(i<n-1){
printf("%lf, ", v[i]);
}else{
printf("%lf]\n", v[i]);
}
}
}
Muy similar a lo que me comentáis.
Por cierto, ¿el funcionamiento de '\b' consiste en suprrimir el último caracter? Por ejemplo con la cadena s = "Hola me gustan los Lakers.\n'' podría eliminar el salto de línea concatenándole '\b' a la cadena?
Por eficiencia deberías sacar la comprobación fuera del bucle, de esta forma:
for (i = 0; i < n - 1; i++)
printf("%lf, ", v[i]);
printf("%lf]\n", v[i]);
En el raro caso de que el numero de elementos pueda ser menor o igual a cero debes verificar eso antes de imprimir el ultimo elemento
Cita de: LaLakers94 en 5 Mayo 2014, 11:48 AM¿el funcionamiento de '\b' consiste en suprrimir el último caracter? Por ejemplo con la cadena s = "Hola me gustan los Lakers.\n'' podría eliminar el salto de línea concatenándole '\b' a la cadena?
No. El efecto de '\b' solo aplica si envías la cadena a la salida estándar, no funcionara si la cadena la almacenas en otro array o la envías a un archivo.
Un saludo