Linux en Espanol
 
Error ejecutando un programa en C (tema #24429)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Programación
Autor Mensaje
solid120
Forista
Registrado: 2012-06-02
Mensajes: 1

Publicado: 2012-06-02 23:19:06    Asunto: Error ejecutando un programa en C

Hola, espero que me puedan ayudar tengo un error que llevo ya casi 2 dias sin poder hacer nada
tengo que entregar un proyecto final en C,
el programa me compila y todo, pero al querer hacer las consultas me salta este me manda a "Error" directamente que es lo que me debe de imprimir si no tengo datos ya cheque consulta.c y veo todo bien, desde consulta.c mando a llamar ordenar.c que es la que ordena los datos, e igual lo miro bien, por eso pido de su ayuda a ver si encuentran un error.
archivos apenas vimos una clase y nos encargaron el proyecto asi, y por lo poco que vimos la verdad tengo muchas dudas.
bueno si mas le dejo los codigos:

consulta.c
[code:1:da2ce8a2c4]#include<stdio.h>
#include"estructura.h"
void consultag()
{FILE *Art;
articulo A;
ordenar();
if((Art=fopen("Arti.dat","rb"))==NULL){
printf("Error...");
exit(0);}
else
{write(fread(&A,sizeof(articulo),1,Art)>0);
imprimir(A);
fclose(Art);
}
}

[/code:1:da2ce8a2c4]

ordenar.c
[code:1:da2ce8a2c4]#include<stdio.h>
#include"estructura.h"
void ordenar()
{FILE *Art;
articulo A,A2,aux;
int x,y;
long int N;
if((Art=fopen("arti.dat","rb+"))==NULL)
{ printf("Error...\n");
exit (0);}
else
{fseek(Art,0L,2);
N=ftell(Art)/sizeof(articulo);
rewind(Art);
for(x=1;x<N;x++)
for(y=0;y<N-x;y++)
{fseek(Art,y*sizeof(articulo),0);
fread(&A,sizeof(articulo),1,Art);
fseek(Art,(y+1)*sizeof(articulo),0);
fread(&A2,sizeof(articulo),1,Art);
if(A.precio>A2.precio)
{aux=A;
A=A2;
A2=aux;
fseek(Art,y*sizeof(articulo),0);
fwrite(&A,sizeof(articulo),1,Art);
fseek(Art,(y+1)*sizeof(articulo),0);
fwrite(&A2,sizeof(articulo),1,Art);
}
}
fclose(Art);
}
}
[/code:1:da2ce8a2c4]

El problema es que me imprime "error" y tambien he llege a pensar que podrian ser las altas
por si acaso les dejo el codigo de altas.c
[code:1:da2ce8a2c4]#include<stdio.h>
#include<stdlib.h>
#include"estructura.h"
void altas()
{FILE *Art;
articulo A;
char salir[5];
float t;
Art=fopen("arti.dat","ab");
do{
printf("Clave del articulo:\n");
scanf("%s",&A.clave);
system("clear");
printf("Tipo:\nBlusa:\nVestido:\nZapato:\nAccesorio:\n");
scanf("%s",&A.tipo);
printf("Descripcion del articulo:\n");
system("clear");
printf("Color:\n");
scanf("%s",&A.descrip.color);
system("clear");
printf("Medida\n");
scanf("%s",&A.descrip.medida);
system("clear");
printf("Precio articulo:\n");
scanf("%f",&t);
A.precio=t;
system("clear");
printf("Codigo de barras:\n");
scanf("%d",&A.codb);
getc(stdin);
system("clear");
printf("Desea ingresar otro articulo?(S/N)\n");
scanf("%s",salir);
fwrite(&A,sizeof(articulo),1,Art);
}while(strcmp(salir,"no"));
fclose(Art);
}
~
[/code:1:da2ce8a2c4]
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2012-06-03 23:28:42    Asunto:

Hola.

No s? si tendr? relaci?n, pero de las tres veces que abres el fichero "arti.dat", una de ellas tiene puesto el nombre en may?sculas: "Arti.dat" Si est?s probando en linux, tendr?s un error por fichero inexistente.

Saludos.





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries