Autor
|
Tema: Ayuda con un ejercicio (Leído 4,116 veces)
|
moliverac8
Desconectado
Mensajes: 5
|
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 ]); 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); }
|
|
« Última modificación: 5 Diciembre 2016, 20:49 pm por engel lex »
|
En línea
|
|
|
|
jvm1994
Desconectado
Mensajes: 29
|
Pregunta, no sería necesario agregar un rewind a tus funciones para que vuelva a el principio del archivo? Valor de retorno:
^ La función getc retorna el carácter siguiente desde el stream de entrada apuntado por stream. Si el stream está en el final de fichero, el indicador del final de fichero para el stream es activado y getc retorna EOF. Si ocurre un error de lectura, el indicador de error para el stream es activado y getc retorna EOF.
|
|
« Última modificación: 6 Diciembre 2016, 04:49 am por jvm1994 »
|
En línea
|
"La posibilidad de crear tu mundo." int main() { eMundo * Own = world_new(); if(Own != NULL) { world_create(Own); } return 0; }
|
|
|
moliverac8
Desconectado
Mensajes: 5
|
Dios muchas gracias, estaba ya desesperado con el ejercicio jajaja,
|
|
|
En línea
|
|
|
|
moliverac8
Desconectado
Mensajes: 5
|
Una última cosa, cuando compilo me sale siempre este error, ejercicio.c:116:115: warning: multi-character character constant [-Wmultichar] racter == '.' || caracter == '?' || caracter == '¿' || caracter == '¡' || car ^ , alguna idea de como arreglarlo?
|
|
|
En línea
|
|
|
|
jvm1994
Desconectado
Mensajes: 29
|
Jaja suele suceder, a veces uno se estanca, por eso es bueno participar en estas comunidades Copié tu código en mi IDE (C::B 16.01) Lo compilé y todo figuraba bien, después me tomé el trabajo de modificar esto, agregando un carácter de más: if (caracter == ',sd' || caracter == ';' | caracter == ',sd' || caracter == Y recién ahí me tiró el warning de Multi-Character. A vos te lo sigue tirando?? Si tu ide tiene la opción "Reconstruí" el proyecto entero.
|
|
« Última modificación: 6 Diciembre 2016, 15:48 pm por jvm1994 »
|
En línea
|
"La posibilidad de crear tu mundo." int main() { eMundo * Own = world_new(); if(Own != NULL) { world_create(Own); } return 0; }
|
|
|
engel lex
|
if (caracter == ',' || caracter == ';' || caracter == '.' || caracter == '?' || caracter == '¿' || caracter == '¡' || caracter == '!') '?' y '¡' no son ascii standard... eso quieres decir que al igual que la "ñ" ocupará 2 caracteres... por eso te dice que estás intentando guardar un multicaracter, en un caracter una pequeña demostración #include <stdio.h> int main() { return 0; }
para compararlo no es tan simple porque se asume que es una comparación entre char array (strings)
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
moliverac8
Desconectado
Mensajes: 5
|
Entiendo, la cuestión es que el ejercicio me pide que cuente los signos de puntuación de un .txt. Podría no incluirlos en la cuenta, los que me comentas que nos son ASCII si no me queda otra opción...pero hay alguna forma de contarlos?
|
|
|
En línea
|
|
|
|
moliverac8
Desconectado
Mensajes: 5
|
Jaja suele suceder, a veces uno se estanca, por eso es bueno participar en estas comunidades Copié tu código en mi IDE (C::B 16.01) Lo compilé y todo figuraba bien, después me tomé el trabajo de modificar esto, agregando un carácter de más: if (caracter == ',sd' || caracter == ';' | caracter == ',sd' || caracter == Y recién ahí me tiró el warning de Multi-Character. A vos te lo sigue tirando?? Si tu ide tiene la opción "Reconstruí" el proyecto entero. Lo estoy compilando en la terminal de Ubuntu, mi profesor me pide que luego use el makefile y demás así que trato de no hacerlo todo con el NetBeans para acostumbrarme.
|
|
|
En línea
|
|
|
|
jvm1994
Desconectado
Mensajes: 29
|
No estoy lo suficientemente interiorizado en el tema por que mañana rindo dos finales y estoy estudiando pero a ver. Podrías almacenar las palabras en una cadena y analizar el contenido de la cadena. (Palabra a palaba). De esta manera podrías hacer unas funciones que busquen "esos caracteres que no son Standar de ASCII" y además adaptar tus otras funciones, pasarle esas cadenas por referencia y analizarlas. int main() { char cadena[100]; //Buffer de 100. FILE * pFile = fopen("archivo.txt", "r"); // Abrimos el archivo para lectura. if(pFile != NULL) // Validamos que el puntero pFile apunte a algún lado. (Que exista) { // Si existe comenzamos tu algoritmo. while(!feof(pFile )) // Mientras no se llegue al final del archivo, iteramos. { fscanf(pFile , "%s", cadena ); // Cada vez que itere almacenará una palabra en cadena. // Funciones que analizan la cadena y retornan valores, que indican cosas // Según tus necesidades, por ejemplo.. cantidad de caracteres.. // (Dentro de la funcion de cantidad de carecteres se puede evaluar si existen tales // caracteres que no son standa del ascii) } } }
No sé si sirve o si me explico, pero la idea quizá te ayude. Analizar una cadena evitaría este error, sin embargo analizar carácter a carácter, no.
|
|
« Última modificación: 6 Diciembre 2016, 18:11 pm por jvm1994 »
|
En línea
|
"La posibilidad de crear tu mundo." int main() { eMundo * Own = world_new(); if(Own != NULL) { world_create(Own); } return 0; }
|
|
|
engel lex
|
tienes que comparar 2 seguidos.... if (caracter == ',' || caracter == ';' || caracter == '.' || caracter == '?' || caracter == '¿' || caracter == '¡' || caracter == '!') puntu++; } if (caracter == 0xc2 && siguiente_caracter == 0xbf){ // ¿ puntu++; }
y hacer lo mismo con los otros, usa el código que te di antes de demostración para saber que valores comparar
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] Ejercicio C 100
Ejercicios
|
Dem0ny
|
2
|
6,049
|
19 Diciembre 2007, 22:45 pm
por Dem0ny
|
|
|
Ayuda co un ejercicio de C#
.NET (C#, VB.NET, ASP)
|
hitori batusai
|
2
|
5,362
|
22 Febrero 2008, 01:53 am
por hitori batusai
|
|
|
Ayuda con ejercicio de VB
Programación Visual Basic
|
guada_sp
|
5
|
3,370
|
8 Marzo 2008, 02:54 am
por jackl007
|
|
|
[Ejercicio] Aca tienen un ejercicio para practicar
« 1 2 3 »
Programación Visual Basic
|
Dreamaker
|
20
|
15,824
|
5 Septiembre 2010, 02:57 am
por TGa.
|
|
|
Ayuda ejercicio de Pascal, cuando uno no lo ve claro pide ayuda
Programación General
|
manu3742
|
1
|
3,253
|
31 Marzo 2011, 15:43 pm
por d(-_-)b
|
|