El problema está en que la primera vez que ejecuto la función "cercarIP" me lo hace correctamente; pero la segunda vez me da el error escrito en el título.
Creo que és por algun tema raro del puntero de tipo FILE, pero ni idea de solucionarlo.
He aqui el fichero con nombres de aulas/departamenos y IP's:
Código:
Y aqui el ejercicio entero en C:I206: 172.16.0.1 172.16.0.2 172.16.0.3 I210: 172.16.1.4 172.16.1.8 172.16.1.5 Dept1: 172.16.0.8 ARGO: 172.16.0.100 172.16.0.7 172.16.0.16 172.16.0.200
Código:
Como podeis comprovar; el codigo esta escrito en catalan ... espero que eso no sea problema para entenderlo.#include <stdio.h> #include <stdlib.h> #include <string.h> //Prototips de les funcions void mostrarMenu(void); void cercarIp(FILE *arxiu, int contador, int assignacio, int longitud, char cadena[], char departament[], char ipintroduida[], char ip[], int resultat); //Funció Principal. int main () { //Variables. int contador=0, assignacio=0, longitud=0, opcio=0, resultat=0; char cadena[100], departament[50], ipintroduida[20], ip[20]; FILE *arxiu=fopen ("aules.txt","r"); while (opcio!=3) { mostrarMenu(); while (opcio<1 || opcio>4) { printf ("\n\nEscolleix una opció (1-3) del menú anterior: "); scanf ("%d",&opcio); } switch (opcio) { case 1: printf ("Per fer."); opcio=0; break; case 2: printf ("\nIntrodueïx l'adreça IP: "); scanf ("%s",ipintroduida); cercarIp (arxiu,contador,assignacio,longitud,cadena,departament,ipintroduida,ip,resultat); opcio=0; break; case 3: printf ("\nHa sortit del menù i el programa ha finalitzat."); break; } } return 0; } // Funcions void mostrarMenu () { printf ("\n\t\t\t----------------------- MENÚ ----------------------"); printf ("\n\t\t\t| |"); printf ("\n\t\t\t| 1 - Crear el document 'aules.txt'. |"); printf ("\n\t\t\t| 2 - Cercar una IP per saber el seu departament. |"); printf ("\n\t\t\t| 3 - Sortir. |"); printf ("\n\t\t\t| |"); printf ("\n\t\t\t---------------------------------------------------"); } void cercarIp(FILE *arxiu, int contador, int assignacio, int longitud, char cadena[], char departament[], char ipintroduida[], char ip[], int resultat) { //contador=0, assignacio=0, longitud=0, resultat=0; if (arxiu==NULL) { printf("\nNo es pot obrir l'arxiu: 'aules.txt'."); } else { while (fgets(cadena,100,arxiu) != NULL) { longitud=strlen(cadena); // Bucle que desa el nom del departament a l'array "departament". while (cadena[contador]!=':') { departament[assignacio]=cadena[contador]; assignacio++,contador++; } departament[assignacio]='\0'; //Assigna el final de cadena per tal de que no imprimeixi basura fins la posició 50. assignacio=0, contador=contador+2; //Fins aqui tot OK. //2n bucle que busca els espais per assignar totes les IP's. while (contador<longitud) { while (cadena[contador]!= ' ' && cadena[contador]!='\0') { ip[assignacio]=cadena[contador]; assignacio++; contador++; } ip[assignacio]='\0'; if (strcmp(ip,ipintroduida)==0) { printf ("\nAdreça: %s",ipintroduida); printf ("\nAquesta adreça es troba a %s\n\n",departament); resultat=1; } contador++, assignacio=0; } contador=0; } if (resultat==0) { printf ("\nAdreça: %s",ipintroduida); printf ("\nAquesta adreça no es troba a cap aula/departament.\n\n"); } fclose(arxiu); } }
Muchas gracias, saludos.