Buenas, estoy haciendo un ejercicio en el que se me pide contar entre otras cosas el numero de palabras que hay en un archivo de txt. Estoy ya un poco desesperado porque no encuentro el error en mi código y no encuentro una solución.
En el código adjunto cuando llama a la función palabras, que cuenta las palabras(obvio), no me cuenta nada.
Sin embargo, si borro las llamadas a las otras dos funciones que hay justo delante, si que cuenta.
No entiendo este comportamiento, agradecería muchísimo la ayuda.
En el código adjunto cuando llama a la función palabras, que cuenta las palabras(obvio), no me cuenta nada.
Sin embargo, si borro las llamadas a las otras dos funciones que hay justo delante, si que cuenta.
No entiendo este comportamiento, agradecería muchísimo la ayuda.
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define X 400000
typedef struct {
int a;
int e;
int i;
int o;
int u;
} Vocales;
typedef struct {
int caracteres;
int palabras;
int puntuacion;
Vocales vocales;
} Datos;
int vocales(FILE *fp){
int a, suma = 0;
char cadena[X];
for (a = 0; a < X; a++) {
fscanf (fp, "%c", &cadena[a]);
if (cadena[a] == 'a' || cadena[a] == 'A')
suma++;
}
return suma;
}
int totales(FILE *fp){
int total = 0;
char cadena[X];
fscanf (fp, "%c", &cadena[X]);
total = strlen(cadena);
return total;
}
int palabras(FILE *fp){
char caracter;
int total;
while((caracter = getc(fp)) != EOF) {
if (caracter == ' ')
total++;
}
return total;
}
int main () {
int a, total, puntu;
char caracter;
Datos datos;
FILE *fp;
fp = fopen("quijote.txt", "r");
datos.vocales.a = vocales(fp);
datos.caracteres = totales(fp);
total = palabras(fp);
while((caracter = getc(fp)) != EOF) {
if (caracter == ',' || caracter == ';' || caracter == '.' || caracter == '?' || caracter == '¿' || caracter == '¡' || caracter == '!')
puntu++;
}
printf ("%d, %d, %d, %d\n", datos.vocales.a, datos.caracteres, total, puntu);
return (1);
}