Autor
|
Tema: DUDA SOBRE FICHEROS EN C (Leído 1,951 veces)
|
elWartix
Desconectado
Mensajes: 6
|
Hola, tengo una duda, y llevo toda la tarde rompiéndome la cabeza y sigo sin encontrar la solución. Tengo un programa que lo que hace es: Te pide por teclado el nombre de la persona a la que quieres buscar, esto lo guarda en un string y seguidamente accede a un fichero y compara el nombre introducido por todo el fichero hasta encontrar el nombre, una vez que encuentra el nombre, imprime este por pantalla, y seguidamente lo que tendría que hacer es hacer un salto de linea en el fichero y leer la siguiente linea, debido a que en la siguiente linea es donde tengo el numero de telefono de cada nombre, pero no se como hacer ese salto de linea con el cursor para leer la siguiente linea. Alguien sabe? void consultar(){ char buscador[100]; char temp[100]; f = fopen("Registro.txt","r"); if(f == NULL){ printf("Error al abrir el fichero"); exit(2); } fflush(stdin); printf("Escribe el nombre del contacto: \n"); fgets(buscador,100,stdin); cambio2(buscador); while(!feof(f)){ fflush(stdin); fgets(temp,100,f); cambio3(temp); if(stricmp(buscador,temp) == 0){ printf("%s \n", temp); //salto de linea en fichero //leer siguiente linea } } Aquí esta el código de la función. y aquí dejo una captura de pantalla del fichero para que vean como esta estructurado y porque quiero hacer el salto de linea: https://gyazo.com/1e4567feb3dc6c84d570828ac0b7b0d6Muchas Gracias.
|
|
|
En línea
|
while(alive){ eat(); sleep(); code(); repeat(); }
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Varias cosas: En base a tu problema, cuándo encuentres el nombre, la siguiente lectura con fscanf te dará la siguiente línea del archivo, el teléfono. Cuando se trata de recoger una cadena con un formato bien establecido de antemano, nada mejor que scanf o fscanf. La razón es que su cadena de configuración es muy configurable y discrimina muy bien los elementos a tomar. Por otra parte, los caracteres de nueva línea que están al final de las cadenas. fgets recoges el carácter de nueva linea, con scanf y fscanf no. Así que según que función uses debes lidiar de una forma u otra con este problema. Aquí te lo expongo, para ver el efecto del carácter de nueva línea comenta las lineas con scanf y fscanf y descomenta las de fgets. #include<stdio.h> #include<string.h> int main() { FILE *f; char nombre[20]; char cadena[20]; int encontrado = 0; f = fopen("archivo.txt", "r"); if(!f) { printf("*** Archivo de datos no encontrado ***\n"); return 1; } // fgets(nombre, 19, stdin); scanf("%19s", nombre ); while(getchar() != '\n'); // <-- Mejor así. Los nombres no tiene caracteres de nueva linea :D do { // fgets(cadena, 19, f); if(strcmp(cadena , nombre ) == 0) encontrado = 1; } while(!feof(f ) && !encontrado ); if(encontrado) { printf("Nombre : %s\n", nombre ); // fgets(cadena, 19, f); printf("Telefono : %s\n", cadena ); } else printf("No se ha encontrado el registro.\n"); return 0; }
|
|
« Última modificación: 11 Marzo 2016, 00:20 am por MAFUS »
|
En línea
|
|
|
|
elWartix
Desconectado
Mensajes: 6
|
Finalmente por si alguien tiene la misma duda lo solucioné asi: int contador = 0; while(!feof(f) && contador <= 2){ fflush(stdin); fgets(temp,100,f); cambio3(temp); if(contador == 1){ printf("NUMERO: %s \n\n\n\n",temp); contador ++; } if(stricmp(buscador,temp) == 0){ printf(" \n\nNOMBRE: %s \n", temp); //salto de linea en fichero //leer siguiente linea contador ++; } } rewind(f); fclose(f); Lo que sí la frase introducida es igual que la frase almacenada en el fichero, se imprime esa linea por pantalla y se le suma uno a contador. Luego se acaba el bucle, y vuelve a empezar y por lo tanto se hace un salto de línea, y se encuentra un if, en este if se dice que si contador es igual a 1, es decir que se ha imprimido la linea anterior(el nombre) se imprime por pantalla tambien esta, donde esta almacenado el numero. Y se incrementa contador en 2. Como la condicion del bucle es que contador sea menor o igual que 2, se sale del bucle. Creo que este algoritmo es bastante complejo para lo que hace, pero hace su función. Saludoos
|
|
|
En línea
|
while(alive){ eat(); sleep(); code(); repeat(); }
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Duda sobre manejo de ficheros
Programación C/C++
|
тαптяα
|
6
|
3,152
|
8 Septiembre 2011, 22:06 pm
por тαптяα
|
|
|
Duda sobre ficheros
Programación C/C++
|
asdavid
|
3
|
2,863
|
6 Diciembre 2012, 15:57 pm
por leosansan
|
|
|
Duda sobre ficheros en funciones
Programación C/C++
|
muymuyperdido
|
4
|
2,964
|
23 Diciembre 2012, 15:43 pm
por muymuyperdido
|
|
|
consulta , sobre ficheros
Programación C/C++
|
feedf
|
5
|
2,612
|
28 Julio 2013, 13:45 pm
por MeCraniDOS
|
|
|
Duda sobre llaves públicas, privadas y criptografía de ficheros con PGP
Seguridad
|
pepemanu1
|
9
|
7,333
|
4 Enero 2015, 23:53 pm
por vk496
|
|