brian69 Posted May 12, 2014 Report Share Posted May 12, 2014 (edited) Buenos gente, necesito crear un programa en c, que me permitar ingresar rango de precios de articulos y revisar en el archivo de txt, de manera qe al ejecutar el programa me pida ingresar un rango de precio con el mayor y menos, y me los arroje a un archivo de txt distinto, me explico por ejemplo en el archivo de texto tengo: zapato 10 lupa 8 camisa 20 EOF.Entonces la parte que me falta es como hacer funcionar la comparacion de precios por ejemplo si quiero que solo deje los articulos mayores a 30 y menores de 9, solo me deberia aparecer en el nuevo archivo de txt la lupa, y ademas de todo esto necesito que me diga cuantos articulos se agregaron y si por ejemplo no hay articulos mayores a 30 entonces que me lo menciones en consola se acceder al archivo y todo eso, pero no se como poner esa parte del codigo donde me haga la recepcion de los rangos y los compare y guarde solo los articulos que encajen, espero me puedan ayudar, Saludos y gracias. Edited May 12, 2014 by brian69 Link to comment Share on other sites More sharing options...
nycko[!] Posted May 12, 2014 Report Share Posted May 12, 2014 ya y... qe llevai hecho? Link to comment Share on other sites More sharing options...
brian69 Posted May 12, 2014 Author Report Share Posted May 12, 2014 (edited) Al final lo logré hacer, pero quiero arreglar un detalle, a la hora del printf o fprintf, quiero qe me muestre el listado de articulos con salto de linea y que los precio se vean en orden es decir. abc 123cdeg 2343fgehj 1233as 123 asi me sale impreso y quiero quede abc 123cdeg 2343fgehj 1233as 123 no sé si entiende, osea todo alineado. yo creo que la edicion debe ir por aqui "fprintf (fp1,"%s %4d\n", articulo, valor);" El codigo final quedó asi, por si a alguien le sirve en algun ejercicio parecido o programa. int main(int argc, char *argv[]){FILE *fp,*fp1;char articulo[100];int cont=0;int valor, inicial, final;fp = fopen ("articulos.txt","r");fp1 = fopen ("info_articulos.txt","w");if (fp!= NULL){/*printf ("Apertura de archivo exitosa\n");leer archivo articulos.txtwhile (!feof(fp)){fscanf (fp,"%s %d ",articulo, &valor);// mostrar en consola:printf ("%s %d\n",articulo,valor);}*/printf ("Articulos con precio Mayor a: ");scanf ("%d", &inicial);printf ("Articulos con precio Menor a: ");scanf ("%d", &final);while (!feof(fp)){fscanf (fp, "%s %d",articulo, &valor);if ((valor>inicial) && (valor<final)){fprintf (fp1,"%s %4d\n", articulo, valor);cont++;}}fprintf(fp1, "Cantidad de articulos: %d\n", cont);fclose(fp);fclose(fp1);}elseprintf ("El archivo no se encuentra..\n");return 0;})) Saludos. Edited May 13, 2014 by brian69 Link to comment Share on other sites More sharing options...
susodicho Posted May 13, 2014 Report Share Posted May 13, 2014 Porsiaca, este foro siempre ha tenido la posibilidad de subir código fuente (se respeta la indentación, etc.) :huasonto: Si quieres que quede alineado, puedes especificar cuántos caracteres de ancho debe tener la cadena (si la cadena tiene menos caracteres, entonces se rellena con espacios). Por ejemplo: fprintf (fp1,"%-15s %d\n", articulo, valor); en este caso, la cadena va a quedar con 15 caracteres de ancho, y si tiene menos caracteres, se agregarán espacios al final de ésta (a la derecha). Al usar un valor negativo indicas que quieres que el texto quede justificado a la izquierda. Tambien puedes especificar el ancho a través de un parámetro al ...printf. En este caso, esta forma podría ser práctica si el ancho se calcula en tiempo de ejecución (si calculas cuál es el artículo con nombre más largo antes de imprimir la lista de artículos). Ejemplo: fprintf (fp1,"%*s %d\n", -15, articulo, valor); si te fijas, en vez de especificar el ancho en la cadena de formato del fprintf, se pasa como parámetro. El asterisco indica que especificador de ancho se pasa como parámetro. :huasonto: Link to comment Share on other sites More sharing options...
brian69 Posted May 13, 2014 Author Report Share Posted May 13, 2014 Gracias por el dato y responder, de momento lo deje con \t para dejar los precios alineados a los articulos ambos teniendo la misma distancia, pero igual probare lo que mencionas, Saludos Enviado desde iPhone 4s con Tapatalk Link to comment Share on other sites More sharing options...
susodicho Posted May 13, 2014 Report Share Posted May 13, 2014 No te sugerí usar tabulación porque no siempre va a funcionar. Si hay mucha diferencia en los largos de los nombres de los artículos, no va a funcionar muy bien. Por ejemplo, si hay un artículo llamado "sal" y otro llamado "detergente", la tabulación no te va a dejar el listado muy ordenado... :huasonto: Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now