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;
}