Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] lee conjunto de líneas de texto y devuelve la mayor

Estas en el tema de lee conjunto de líneas de texto y devuelve la mayor en el foro de C/C++ en Foros del Web. Hola, estoy leyendo K & R para aprender a programar C. Tengo este código de ejemplo pero no termino de comprender su lógica, a ver ...
  #1 (permalink)  
Antiguo 05/03/2014, 08:20
 
Fecha de Ingreso: marzo-2014
Mensajes: 2
Antigüedad: 10 años, 9 meses
Puntos: 0
lee conjunto de líneas de texto y devuelve la mayor

Hola, estoy leyendo K & R para aprender a programar C.
Tengo este código de ejemplo pero no termino de comprender su lógica, a ver si me pueden ayudar un poco.

Código:
#include <stdio.h>
#define MAXLINE 1000 /* tamaño máximo de la linea de entrada */

int getline(char line[], int maxline);
void copy(char to[], char from[]);

/* imprime la línea de entrada más larga */
int main(int argc, char *argv[]) {
	int len;  /* longitud actual de la línea */
	int max;  /* máxima longitud vista hasta el momento */
	char line[MAXLINE]; /* línea de entrada actual */ 
	char longest[MAXLINE]; /* la línea más larga se guarda aquí */
	
	max = 0;
	while ((len = getline(line, MAXLINE)) > 0)
		if (len > max) {
			max = len;
			copy(longest, line);
		}
	if (max > 0) /* no hubo línea */
			printf("%s", longest);
	
	return 0;
}

/* getline: lee una línea en s, regresa su longitud */
int getline(char s[], int lim)
{
	int c, i;
	
	for (i=0; i<lim-1 && (c=getchar()) != EOF && c != '\n'; ++i)
		s[i]=c;
	if (c == '\n'){
		s[i] = c;
		++i;
	}
	s[i] = '\0';
	return i;
}

/* copy: copiar 'from' en 'to'; supone que to es suficientemente grande */
void copy(char to[], char from[])
{
	int i;
	
	i = 0;
	while ((to[i] = from[i]) != '\0')
		++i;
}


en la función getline, la variable c está para guardar el contenido de getline en ella. Pero no entiendo por qué pregunta con el if si c == '\n' para dsp guardar un '\n' en s

Código:
  if (c == '\n'){ 
       s[i] = c;
Otra pregunta, el parámetro que recibe getline (int lim) no está definido en ningún lado.
Mismo los dos arreglos de la función void.

Esas son mis dudas , muchas gracias.
  #2 (permalink)  
Antiguo 05/03/2014, 08:46
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 11 meses
Puntos: 35
Respuesta: lee conjunto de líneas de texto y devuelve la mayor

La variable c va guardando el caracter actual a medida que va leyendo la cadena que le pasaron como argumento. Una vez terminada de leer la cadena, verifica si el último caracter era el de nueva línea ('\n'), entonces de ser así lo agrega a s.

El parámetro lim lo establece el programador cuando llama a la función:

Código C:
Ver original
  1. getline("Hola, mundo!", 12);  /* 12 es lim */

  #3 (permalink)  
Antiguo 06/03/2014, 12:34
 
Fecha de Ingreso: marzo-2014
Mensajes: 2
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: lee conjunto de líneas de texto y devuelve la mayor

Me aclaro un poco el panorama. gracias

Etiquetas: arreglo, conjunto, devuelve, int, lee, mayor, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:57.