elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  DUDA SOBRE FICHEROS EN C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: DUDA SOBRE FICHEROS EN C  (Leído 1,670 veces)
elWartix

Desconectado Desconectado

Mensajes: 6



Ver Perfil
DUDA SOBRE FICHEROS EN C
« en: 10 Marzo 2016, 19:51 pm »

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?

Código:
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/1e4567feb3dc6c84d570828ac0b7b0d6



Muchas Gracias.


En línea

while(alive){
   eat();
   sleep();
   code();
   repeat();
}
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: DUDA SOBRE FICHEROS EN C
« Respuesta #1 en: 11 Marzo 2016, 00:14 am »

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.
Código
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. int main() {
  5.    FILE *f;
  6.    char nombre[20];
  7.    char cadena[20];
  8.    int encontrado = 0;
  9.    f = fopen("archivo.txt", "r");
  10.    if(!f) {
  11.        printf("*** Archivo de datos no encontrado ***\n");
  12.        return 1;
  13.    }
  14.    printf("> ");
  15.    // fgets(nombre, 19, stdin);
  16.    scanf("%19s", nombre); while(getchar() != '\n'); // <-- Mejor así. Los nombres no tiene caracteres de nueva linea :D
  17.    do {
  18.        // fgets(cadena, 19, f);
  19.        fscanf(f, "%19s", cadena); fgetc(f);
  20.        if(strcmp(cadena, nombre) == 0)
  21.            encontrado = 1;
  22.    } while(!feof(f) && !encontrado);
  23.    if(encontrado) {
  24.        printf("Nombre   : %s\n", nombre);
  25.        // fgets(cadena, 19, f);
  26.        fscanf(f, "%19s", cadena); fgetc(f);
  27.        printf("Telefono : %s\n", cadena);
  28.    }
  29.    else printf("No se ha encontrado el registro.\n");
  30.    fclose(f);    
  31.    return 0;
  32. }
  33.  


« Última modificación: 11 Marzo 2016, 00:20 am por MAFUS » En línea

elWartix

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Re: DUDA SOBRE FICHEROS EN C
« Respuesta #2 en: 11 Marzo 2016, 18:03 pm »

Finalmente por si alguien tiene la misma duda lo solucioné asi:

Código:
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 ;D ;D
En línea

while(alive){
   eat();
   sleep();
   code();
   repeat();
}
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre manejo de ficheros
Programación C/C++
тαптяα 6 2,786 Último mensaje 8 Septiembre 2011, 22:06 pm
por тαптяα
Duda sobre ficheros
Programación C/C++
asdavid 3 2,574 Último mensaje 6 Diciembre 2012, 15:57 pm
por leosansan
Duda sobre ficheros en funciones
Programación C/C++
muymuyperdido 4 2,666 Último mensaje 23 Diciembre 2012, 15:43 pm
por muymuyperdido
consulta , sobre ficheros
Programación C/C++
feedf 5 2,332 Último mensaje 28 Julio 2013, 13:45 pm
por MeCraniDOS
Duda sobre llaves públicas, privadas y criptografía de ficheros con PGP
Seguridad
pepemanu1 9 6,866 Último mensaje 4 Enero 2015, 23:53 pm
por vk496
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines