Estructuras

(1/1)

Eli5Nocive:
El programa deja de funcionar con la funcion imprimir_mercado, y no entiendo por que sucede esto
Código
Código:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
 
typedef struct Mercados_Municipales{
char nombre[20];
char direccion[50];
char telefono[11];
}Mercados;
 
Mercados leer_mercado(void);
void imprimir_mercado(Mercados mercado);
 
int main(){
Mercados mercados[20];
Mercados mercado;
char desicion;
int i, cantidad = 0, numero;
 
printf("\n\t\tMercados Municipales de Ciudad Guayana\n\n");
 
while(cantidad < 20){
 
do{
printf("%d Mercados Municipales. Pasamos a otro? [S/N] ", cantidad);
desicion = getchar(); // Leemos un caracter
while(getchar() == EOF); // Necesario para se coma el \n
}while(desicion != 'S' && desicion != 's' && desicion != 'N' && desicion != 'n');
if(desicion == 'N' || desicion == 'n') break; // Si elige N, se sale
 
mercado = leer_mercado();
mercados[cantidad++] = mercado;
}
 
printf("\nMostrar informacion del Mercado: ");
scanf("%d", numero);
 
imprimir_mercado(mercados[numero]);
 
return 0;
}
 
Mercados leer_mercado(){
Mercados mercado;
 
printf("\nNombre: ");
gets(mercado.nombre);
printf("Direccion: ");
gets(mercado.direccion);
printf("Telefono: ");
gets(mercado.telefono);
printf("\n");
 
return mercado;
}
 
void imprimir_mercado(Mercados mercado){
printf("\n\n\t\t%s", mercado.nombre);
printf("\nDireccion: &s\tTelefono: %s\n", mercado.direccion, mercado.telefono);
}
 

profinet:
Varias observaciones:

    1. Evita el uso de gets() debido a que no verifica el tamaño de la entrada, lo que podría resultar en un desbordamiento del búfer.

    2. Has omitido el uso del operador & al utilizar scanf() para la variable número. Debería ser scanf("%d", &numero);

    3. En la función imprimir_mercado(), has utilizado &s en lugar de %s. Esto es incorrecto y debe corregirse a %s.

    4. He optado por utilizar un puntero para la estructura Mercados en la función leer_mercado(). Esta elección es más adecuada cuando se necesita devolver una variable del struct.


EI: codigo removido, no hagas tareas ajenas por favor.

Atika:
    Error en scanf: Cuando se recibe el número para mostrar la información de un mercado en específico, falta el & antes de la variable numero en la función scanf.

    Error de formato en printf: En la función imprimir_mercado, tienes un error en el formato del printf. Estás usando &s en lugar de %s para imprimir la dirección y falta un %s para imprimir el nombre.

    Función gets obsoleta: La función gets es obsoleta y puede ser peligrosa debido a problemas de desbordamiento de búfer. Se recomienda usar fgets en su lugar.

Navegación

[0] Índice de Mensajes