Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - moliverac8

#1
Programación C/C++ / Ayuda con un ejercicio
5 Diciembre 2016, 20:27 PM
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.

#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);

}