elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda archivos en C (solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda archivos en C (solucionado)  (Leído 1,835 veces)
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Duda archivos en C (solucionado)
« en: 19 Mayo 2014, 11:07 am »

Hola de nuevo. Resulta que estoy haciendo un programa que involucra archivos y hay un segmento en el que me resulta útil saber la línea más larga del archivo.

Para ello tengo este código:
Código
  1. int main(void)
  2. {
  3. int N;
  4. // codigo
  5. FILE *archivo;
  6. archivo = fopen(nombreArchivo.txt, "r");
  7. N = mayorLinea(archivo);
  8. // codigo
  9. fclose(archivo);
  10.  
  11. return EXIT_SUCCESS;
  12. }
  13.  
  14. int mayorLinea(FILE *arch)
  15. {
  16. char c;
  17. int contador = 0;
  18. int aux = 0;
  19.  
  20. while(c != EOF){
  21. c = fgetc(arch);
  22.  
  23. if(c != '\n' && c != EOF){
  24. contador++;
  25. }
  26. else{
  27. if(contador > aux){
  28. aux = contador;
  29. }
  30. contador == 0;
  31. }
  32. }
  33.  
  34. return aux;
  35. }
  36.  
La duda es que si imprimo N en el main() me sale siempre 0. Me parece que la forma en la que llamo a la función es errónea, pero no encuentro tal error.
Un saludo y gracias


« Última modificación: 19 Mayo 2014, 11:24 am por David8 » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda archivos en C
« Respuesta #1 en: 19 Mayo 2014, 11:16 am »

En primer lugar, 'c' no está inicializado. Pero además, dado que el valor que tenga 'c' en la primera iteración es indiferente, deberías replantearte cambiar el while por un do-while.

Código
  1. int mayorLinea(FILE *arch)
  2. {
  3. char c;
  4. int contador = 0;
  5. int aux = 0;
  6.  
  7. while(c != EOF){

En la siguiente sección, no reinicias la variable "contador", sino que estás forzando una comparación:

Código
  1. if(contador > aux){
  2. aux = contador;
  3. }
  4. contador == 0;

A ese "==" le sobra uno de los dos caracteres.


En línea

David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Duda archivos en C
« Respuesta #2 en: 19 Mayo 2014, 11:24 am »

En primer lugar, 'c' no está inicializado. Pero además, dado que el valor que tenga 'c' en la primera iteración es indiferente, deberías replantearte cambiar el while por un do-while.

Código
  1. int mayorLinea(FILE *arch)
  2. {
  3. char c;
  4. int contador = 0;
  5. int aux = 0;
  6.  
  7. while(c != EOF){

En la siguiente sección, no reinicias la variable "contador", sino que estás forzando una comparación:

Código
  1. if(contador > aux){
  2. aux = contador;
  3. }
  4. contador == 0;

A ese "==" le sobra uno de los dos caracteres.

Hice lo que me dijiste
Código
  1. int mayorLinea(FILE *arch)
  2. {
  3. char c = 'a';
  4. int contador = 0;
  5. int aux = 0;
  6.  
  7. c = fgetc(arch);
  8. do{
  9. if(c != '\n'){
  10. contador++;
  11. }
  12. else{
  13. if(contador > aux){
  14. aux = contador;
  15. }
  16. contador = 0;
  17. }
  18.  
  19. c = fgetc(arch);
  20.  
  21. } while(c != EOF);
  22.  
  23. return aux;
  24. }

y solucionado

Muchas gracias
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda archivos en C (solucionado)
« Respuesta #3 en: 19 Mayo 2014, 11:28 am »

De nada hombre.

Un placer.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda archivos en C (solucionado)
« Respuesta #4 en: 19 Mayo 2014, 18:36 pm »

Las funciones getchar, fgetc y getc retornan un valor de tipo int, este se debe almacenar en una variable del mismo tipo para evitar problemas, también se pueden evitar las sentencias duplicadas para la lectura del archivo.

Con los cambios la función termina así:
Código
  1. int mayorLinea(FILE *in)
  2. {
  3.   int ch;
  4.   int i;
  5.   int max;
  6.  
  7.   i = max = 0;
  8.   while ((ch = fgetc(in)) != EOF){
  9.      i++;
  10.  
  11.      if (ch == '\n'){
  12.         if (i > max)
  13.            max = i;
  14.         i = 0;
  15.      }
  16.   }
  17.  
  18.   return max;
  19. }

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda con manejo de archivos [Solucionado]
Programación Visual Basic
vivachapas 0 730 Último mensaje 23 Diciembre 2007, 03:03 am
por vivachapas
Archivos VTS VOB [SOLUCIONADO]
Multimedia
Razgriz 5 20,471 Último mensaje 21 Enero 2009, 20:23 pm
por Razgriz
[SOLUCIONADO]Duda Barra de Progreso en Transferencia de Archivos (Java)
Java
jossydeleon 7 11,374 Último mensaje 3 Septiembre 2010, 05:20 am
por Leyer
DUDA Ruta archivos en ejecución[SOLUCIONADO] « 1 2 »
.NET (C#, VB.NET, ASP)
Yaldabaot 10 4,259 Último mensaje 8 Febrero 2014, 21:23 pm
por Yaldabaot
Duda archivos .torrent(SOLUCIONADO)
Dudas Generales
Senior++ 3 2,221 Último mensaje 8 Noviembre 2014, 09:42 am
por Senior++
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines