Hola a todos,
bueno, tengo que leer los siguientes datos:
año
modelo
marca
costo de automovil tipo sedan
costo de automovil tipo pick-up
costo de automovil tipo deportivo
pero tengo que usar una estructura y leer esos datos 3 veces, osea para 3 automoviles diferentes.
tengo este codigo pero se me hace demasiado largo, y queria ver si hay alguna forma de hacerlo mas corto:
#include<stdio.h>
struct Auto{
int año;
float sedan, pickup, deportivo;
char modelo[100];
char marca[100];
}c1, c2, c3;
int main(){
char buffer[100];
//datos del primer auto
printf("Introduzca los datos del primer auto:\nanio: ");
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer, "%d", &c1.año);
printf("Introduzca el modelo: ");
fgets(c1.modelo,sizeof(c1.modelo),stdin);
printf("Introduzca la marca: ");
fgets(c1.marca,sizeof(c1.marca),stdin);
printf("Introduzca los precios para sedan, pickup, deportivo:\n");
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c1.sedan);
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c1.pickup);
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c1.deportivo);
//datos del segundo auto
printf("Introduzca los datos del segundo auto:\nanio: ");
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer, "%d", &c2.año);
printf("Introduzca el modelo: ");
fgets(c1.modelo,sizeof(c2.modelo),stdin);
printf("Introduzca la marca: ");
fgets(c1.marca,sizeof(c2.marca),stdin);
printf("Introduzca los precios para sedan, pickup, deportivo:\n");
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c2.sedan);
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c2.pickup);
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c2.deportivo);
//datos del tercer auto
printf("Introduzca los datos del tercer auto:\nanio: ");
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer, "%d", &c3.año);
printf("Introduzca el modelo: ");
fgets(c1.modelo,sizeof(c3.modelo),stdin);
printf("Introduzca la marca: ");
fgets(c1.marca,sizeof(c3.marca),stdin);
printf("Introduzca los precios para sedan, pickup, deportivo:\n");
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c3.sedan);
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c3.pickup);
fgets(buffer,sizeof(buffer),stdin);
sscanf(buffer,"%f",&c3.deportivo);
return 0;
}
Gracias. :D
depende lo que quieras hacer con esos datos, si los queres mostrar por pantalla o guardar en un archivo, seria mas fácil declarar una sola estructura y hacer un ciclo, un for de 3, y cargarlos en la misma estructura. y vas devolviendo los datos.
crear una matriz? de [3]x[X]
algo asi
struct Auto{
int año[3];
float sedan[3], pickup[3], deportivo[3];
char modelo[3][100];
char marca[3][100];
} c1;
Comentario.
float sedan[3], pickup[3], deportivo[3];
esto lo podes tmb modificar
sabiendo vos que
sedan pickup deportivo
1 2 3
hacer una matriz
floar algo [3] [3];
Consejos ...
Agrupa el código en funciones a ser posible , de esa manera evitarás tener que repetirlo y el código será más corto y fácil de leer.
Usa memoria dinámica siempre que sea posible, no crees que es un desperdicio reservar 100 posiciones para la marca y el modelo ?
Espero que este ejemplo te sirva de ayuda
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ELEMENTOS 2
#define LIMPIA_BUFFER while(getchar()!='\n');
typedef struct{
int año;
float sedan, pickup, deportivo;
char *modelo;
char *marca;
}type_auto;
int main(int elem , char ** args ){
int num_elementos = 0;
char buffer[100];
int i = 0;
if (args[1] != NULL){
sscanf(args[1],"%d",&num_elementos);
}
if(num_elementos > 50 || num_elementos < 1 ){
num_elementos = ELEMENTOS;
}
type_auto autos[num_elementos];
init_auto(autos, num_elementos);
for (i = 0 ; i < num_elementos ; i++){
printf("Introduzca el modelo del auto %d: " , (i + 1));
fgets(buffer,100,stdin);
autos[i].modelo = (char*) malloc(strlen(buffer) * sizeof(char*));
strcpy(autos[i].modelo , buffer);
memset(buffer,' ',100);
printf("Introduzca la marca del auto %d: ", (i + 1));
fgets(buffer,100,stdin);
autos[i].marca = (char*) malloc(strlen(buffer) * sizeof(char*));
strcpy(autos[i].marca , buffer);
memset(buffer,' ',100);
printf("Escriba el año del auto \n");
fscanf(stdin,"%d",&autos[i].año);
LIMPIA_BUFFER;
printf("Introduzca los precios para sedan, pickup, deportivo:\n");
fscanf(stdin,"%f",&autos[i].sedan);
LIMPIA_BUFFER;
fscanf(stdin,"%f",&autos[i].pickup);
LIMPIA_BUFFER;
fscanf(stdin,"%f",&autos[i].deportivo);
LIMPIA_BUFFER;
}
mostrar_auto(autos, num_elementos);
free_auto(autos , num_elementos);
printf("\nPresione una tecla para terminar...");
getchar();
}
int init_auto(type_auto *autos , int elementos){
int i = 0;
for (i ; i < elementos ; i++){
autos[i].año = 0;
autos[i].sedan = 0;
autos[i].pickup = 0;
autos[i].deportivo = 0;
autos[i].modelo = NULL;
autos[i].marca = NULL;
}
return 0;
}
int mostrar_auto(type_auto *autos , int elementos){
int i = 0;
for (i ; i < elementos ; i++){
printf("\nMarca =%sModelo =%sAnio =%d\nPrecios: Sedan =%f Pickup =%f Deportivo =%f ",autos[i].marca,autos[i].modelo,autos[i].año,
autos[i].sedan, autos[i].pickup, autos[i].deportivo);
}
return 0;
}
int free_auto(type_auto *autos , int elementos){
int i = 0;
for (i ; i < elementos ; i++){
free(autos[i].modelo);
free(autos[i].marca);
}
return 0;
}