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.