• Jueves 14 de Noviembre de 2024, 23:23

Autor Tema:  problema con codigo!  (Leído 1383 veces)

benne

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
problema con codigo!
« en: Martes 9 de Marzo de 2010, 15:08 »
0
buenas a todos, mi problema es que yo kiero sacar de un fichero de texto que haya creado yo.. el numero de palabras que hay en dicho texto y  tmb el numero de lineas que hay en el texto..
mi codigo es el siguiente: ( no funciona) por eeso vengo aqui a que me ayudeis aber como lo acemos funcionar!

Código: C
  1.  
  2. int separador (int ch)
  3. {
  4.     return (ch==' ') || (ch=='t') || (ch=='n');
  5. }
  6.  
  7.  
  8. int main ()
  9. {
  10.     FILE * pf;
  11.     char fichero[100];
  12.   long contador_caracteres;
  13.   long contador_palabras;
  14.   long contador_lineas;
  15.   int  actual;
  16.   int  prev;
  17.   pf=fopen ("c:/texto.txt","r+");
  18.  
  19.   // Inicialización de los contadores
  20.  
  21.   contador_caracteres = 0;
  22.   contador_palabras = 0;
  23.   contador_lineas = 1;
  24.  
  25.   // Lectura de los datos de entrada
  26.  
  27.   prev   = ' ';
  28.   actual = getchar();
  29.  
  30.   while (pf != EOF) {
  31.  
  32.       contador_caracteres ++;
  33.  
  34.       // ¿Fin de línea?
  35.  
  36.       if (pf=='n')
  37.           contador_lineas++;
  38.  
  39.       // ¿Comienzo de una nueva palabra?
  40.  
  41.       if (!separador(pf) && separador(prev))
  42.           contador_palabras++;
  43.  
  44.       // Siguiente carácter
  45.  
  46.       prev = actual;
  47.       //fichero= getchar();
  48.   }
  49.  
  50.   // Resultado
  51.  
  52.   printf("%ld caracteresn", contador_caracteres);
  53.   printf("%ld palabrasn", contador_palabras);
  54.   printf("%ld líneasn", contador_lineas);
  55.  
  56.   return 0;
  57. }
  58.  
  59.  
  60.  

espero quye me ayudeis es un poko urgente :P

posman

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: problema con codigo!
« Respuesta #1 en: Martes 9 de Marzo de 2010, 15:35 »
0
Por que en las condiciones estas utilizando el descriptor del archivo en lugar del caracter que leiste?
Código: Text
  1. if (pf=='n')
  2. ...
  3. if (!separador(pf) && separador(prev))
  4.  
No deberias comparar la variable actual?

Hace mucho que no programo en C, pero creo que para obtener un caracter del archivo debes utilizar fgetc

benne

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: problema con codigo!
« Respuesta #2 en: Martes 9 de Marzo de 2010, 15:49 »
0
y como sería :S esque no tengo ni idea..

Vndecid

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: problema con codigo!
« Respuesta #3 en: Martes 9 de Marzo de 2010, 16:08 »
0
Te tiro pseudocodigo

Código: C
  1. char linea 500//suponiendo que como maximo la linea tiene 500 caracteres si no vas a tener que contar de a uno ....
  2.  
  3. while(fgets(linea,500,archivo)!=EOF)
  4. {
  5.    cuentalinea++;
  6.    cuentaletras+=strlength(linea);
  7. }
  8.  
  9.  

y arrivederchi!

benne

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: problema con codigo!
« Respuesta #4 en: Jueves 11 de Marzo de 2010, 10:51 »
0
me aprece que   lo e puesto bien el codigo pero me sigue sin ir aber si  me ayudais :S

Código: C
  1.  
  2. int main ()
  3. {
  4.     FILE * pf;
  5.     char arr[100];
  6.     char linea [5000];
  7.     int fin=0;
  8.     int contador=0;
  9.     int contador2=0;
  10.     char * controlador;
  11.  
  12.  
  13.  
  14.   pf=fopen ("c:/bf2/texto.txt","r+");
  15.  
  16.  
  17.   while (fin!=EOF)
  18.   {
  19.       fin=fscanf(pf,"%s",arr);
  20.       contador=contador+1;
  21.   }
  22.   fseek(pf,0,SEEK_SET);
  23.  
  24.   while ( controlador!=NULL)
  25.   {
  26.       controlador=fgets(linea,5000,pf);
  27.       contador2=contador2+1;
  28.  
  29.   }
  30.   printf ("El nº de palabras del fichero es: %d",contador);
  31.    printf ("El nº de lineas del fichero es: %d",contador2);
  32.  
  33.   fclose(pf);
  34.  
  35.   return 0;
  36. }
  37.  
  38.  
  39.