Bueno, pues aquí estoy otra vez. La funcion sscanf a veces no me carga. El rpograma avees arroja resultadoserroneos y a veces no, pero siempre se cuelga. Y ya no sé que más intentar despues de 5 horas frente al ordenador. Cuando el sscanf no funciona utilizo atoi. Pero me devuelve 0 en los arrays pese a que los printf (ver programa) me devuelven valores.
Código (c) [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <math.h>
int main (int argc, char *argv[])
{
char field [5000];
int buscador=0;
char cargavacio[10];
char carganombres[3400];
char cargacodigo[1500];
char cargapower[1500];
char cargav[1200];
char cargaisp[1100];
char cargaempuje[1100];
char delim[3]=", ";
char *cadenaauxiliar1;
int contador=0;
int contador2=1;
int y=0;
int j=0;
int contador3=0;
int resultados[150];
int objetivo=0;
char objetivof[50];
int numero;
strcpy(field, argv[1]);
FILE *fent;//Apertura de archivo.
fent=fopen (field, "r");
fgets(cargavacio, 10, fent);
fgets(carganombres, 3400, fent);
printf("Inicio comprobaciones\n");
for( contador=0; carganombres[contador] != ';'; contador++)//Aquí se realiza la cuenta para saber los elementos de char.
{
if (carganombres[contador]==' ' && carganombres[contador-1]==',')
{
contador2++;
}
}
printf("contador 2 fijado a %d\n", contador2);
int i=0;
char **nombre = (char**) calloc(contador2, sizeof(char*));
for ( i = 0; i < contador2; i++ )
{
nombre[i] = (char*) calloc(500, sizeof(char));
}
char **codigo = (char**)calloc(contador2, sizeof(char*));
for ( i = 0; i < contador2; i++ )
{
codigo[i] = (char*) calloc(500, sizeof(char));
}
double * power = malloc(contador2 * sizeof(int));
int * v = malloc(contador2 * sizeof(int));
int * isp = malloc(contador2 * sizeof(int));
double * empuje = malloc(contador2 * sizeof(int));
printf("Asignacion de memoria lista\n");
fgets (cargacodigo, 1500, fent);
fgets (cargapower, 1500, fent);
fgets (cargav,1200, fent);
fgets (cargaisp, 1100, fent);
fgets (cargaempuje, 1100, fent);
puts(cargaempuje);
puts(cargapower);
printf("Carga de datos de fichero completada");
y=0;
cadenaauxiliar1 = strtok(carganombres, delim);
while(cadenaauxiliar1!= NULL )
{
nombre[y]=cadenaauxiliar1;
printf( " %s\n",nombre[y]);
y++;
cadenaauxiliar1 = strtok(NULL, delim);
}
printf("Distribucion de nombres lista\n");
contador3=y;
y=0;
cadenaauxiliar1 = strtok(cargacodigo, delim);
while(cadenaauxiliar1!= NULL )
{
codigo[y]=cadenaauxiliar1;
printf( " %s\n",codigo[y]);
y++;
cadenaauxiliar1 = strtok(NULL, delim);
}
printf("distribucion de codigos completa\n");
y=0;
cadenaauxiliar1 = strtok(cargapower, delim);
while(y<contador2 )
{
power[y]=atoi(cadenaauxiliar1);
printf("%d\n",atoi(cadenaauxiliar1));
y++;
cadenaauxiliar1 = strtok(NULL, delim);
}
printf("Power listo\n");
y=0;
cadenaauxiliar1 = strtok(cargav, delim);
while(y<contador2)
{
sscanf(cadenaauxiliar1, "%d", &numero);
v[y]=numero;
printf("%d\n",v[y]);
y++;
cadenaauxiliar1 = strtok(NULL, delim);
}
printf("V cargada\n");
y=0;
cadenaauxiliar1 = strtok(cargaisp, delim);
while(y<contador2 )
{
sscanf(cadenaauxiliar1, "%d", &numero);
isp[y]=numero;
printf("%d\n",isp[y]);
y++;
cadenaauxiliar1 = strtok(NULL, delim);
}
printf("ISP cargado\n");
y=0;
cadenaauxiliar1 = strtok(cargaempuje, delim);
while(y<contador2)
{
empuje[y]=atoi(cadenaauxiliar1);
printf("%d\n",atoi(cadenaauxiliar1));
y++;
cadenaauxiliar1 = strtok(NULL, delim);
}
printf("Empuje listo\n");
printf("A continuacion, indique los criterios de busqueda\n");
printf("Introduzca 1 para buscar por el nombre del sistema\n");
printf("Introduzca 2 para buscar por el codigo del sistema de propulsion\n");
printf("Introduzca 3 para buscar segun la energia del sistema (en MW)\n");
printf("Introduzca 4 para buscar en terminos de velocidad de escape de la masa de reaccion/propelente\n");
printf("Introduca 5 para buscar segun el Impulso especifico (en segundos)\n");
printf("Pulse 6 para buscar segun el empuje (en Newtons)\n");
printf("Pulse 0 para salir\n");
scanf("%d", &buscador);
i=0;
switch(buscador)
{
case 1:
printf("Ha pulsado el 1\n");
printf("Introduzca el contenido a buscar.\n");
scanf("%s", &objetivof);
printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
for(i=0; i<contador2; i++)
{
if (strcmp(nombre[i], objetivof) == 0);
{
printf("Nombre: %s\n", *nombre[i]);
printf("Tipo: %s\n", *codigo[i]);
printf("Energia: %d\n", power[i]);
printf("velocidad de escape: %d\n", v[i]);
printf("ISP: %d\n", isp[i]);
printf("Empuje: %d\n", empuje[i]);
}
}
break;
case 2:
printf("Ha pulsado el 2\n");
printf("Introduzca el contenido a buscar.\n");
scanf("%s", &objetivof);
printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
for(i=0; i<contador2; i++)
{
if (strcmp(codigo[i], objetivof) == 0);
{
printf("Nombre: %s\n", *nombre[i]);
printf("Tipo: %s\n", *codigo[i]);
printf("Energia: %d\n", power[i]);
printf("velocidad de escape: %d\n", v[i]);
printf("ISP: %d\n", isp[i]);
printf("Empuje: %d\n", empuje[i]);
}
}
break;
case 3:
printf("Ha pulsado el 3\n");
printf("Introduzca el contenido a buscar.\n");
scanf("%d", &objetivo);
printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
for(i=0; i<contador2; i++)
{
if((power[i])> objetivo)
{ printf("Nombre: %s\n", *nombre[i]);
printf("Tipo: %s\n", *codigo[i]);
printf("Energia: %d\n", power[i]);
printf("velocidad de escape: %d\n", v[i]);
printf("ISP: %d\n", isp[i]);
printf("Empuje: %d\n", empuje[i]);
}
i++;
}
break;
case 4:
printf("Ha pulsado el 4\n");
printf("Introduzca el contenido a buscar.\n");
scanf("%d", &objetivo);
printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
for(i=0; i<contador2; i++)
{
if((v[i])>objetivo)
{
printf("Nombre: %s\n", *nombre[i]);
printf("Tipo: %s\n", *codigo[i]);
printf("Energia: %d\n", power[i]);
printf("velocidad de escape: %d\n", v[i]);
printf("ISP: %d\n", isp[i]);
printf("Empuje: %d\n", empuje[i]);
}
i++;
}
break;
case 5:
printf("Ha pulsado el 5\n");
printf("Introduzca el contenido a buscar.\n");
scanf("%d", &objetivo);
printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
for(i=0; i<contador2; i++)
{
if((isp[i])>objetivo)
{
printf("Nombre: %s\n", *nombre[i]);
printf("Tipo: %s\n", *codigo[i]);
printf("Energia: %d\n", power[i]);
printf("velocidad de escape: %d\n", v[i]);
printf("ISP: %d\n", isp[i]);
printf("Empuje: %d\n", empuje[i]);
}
i++;
}
break;
case 6:
printf("Ha pulsado el 6\n");
printf("Introduzca el contenido a buscar.\n");
scanf("%d", &objetivo);
printf("Los siguientes resultados concuerdan con los criterios de busqueda:\n");
for(i=0; i<contador2; i++)
{
if((empuje[i])>objetivo)
{
printf("Nombre: %s\n", *nombre[i]);
printf("Tipo: %s\n", *codigo[i]);
printf("Energia: %d\n", power[i]);
printf("velocidad de escape: %d\n", v[i]);
printf("ISP: %d\n", isp[i]);
printf("Empuje: %d\n", empuje[i]);
}
i++;
}
break;
case 0:
exit(0);
break;
default:
{
printf("Ha introducido un caracter no incluido en el menu\n");
}
break;
}
printf("Busqueda y comparacion completada\n");
if(j!=0){
int sino=0;
int comp=0;
printf("¿Desea iniciar la funcion calculadora? [1 si, 0 no]");
scanf("%d", &sino);
if(sino==1)
{
float mf=0;
float mi=0;
float comb=0;
float resultado=0;
int n=0;
printf("Introduzca el dato de velocidad de escape del propulsor sleccionado.\n");
scanf("%d",&comp);
printf("¿Cuanto pesa el vehiculo?(en kg)\n");
scanf("%d",&mi);
printf("¿Cuantos kilos de combustible lleva?\n");
scanf("%d", &comb);
mf=comb+mi;
resultado=comp*log(mi/mf);
printf("Delta-V estimada: %f m/s\n", resultado);
}
}
for ( i = 0; i < contador2; i++ )
{
free(nombre[i]);
}
free(nombre);
for ( i = 0; i < contador2; i++ )
{
free(codigo[i]);
}
free(codigo);
free(v);
free(isp);
free(power);
free(empuje);
}
Código (xml) [Seleccionar]
DAWN-mission-NSTAR, Resistojet, Radioisotope, ArcJet
ESTAT, ETHERM, NTR-SOLID, ETHERM,
5, 9, 7, 85,
4, 6, 7, 83,
5, 3, 9, 27,
9, 5, 8, 55,