Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/03/2014, 08:20
hyper12
 
Fecha de Ingreso: marzo-2014
Mensajes: 2
Antigüedad: 10 años, 1 mes
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.