Originariamente inviato da playbasfa
A quanto ho capito io il return i della funzione getline restituisce un valore che viene attribuito a line; queso valore successivamente tramite la funzione copy verrà attributo a longest,
Non capisco tutto quello che segue a questa affermazione, comunque getline restituisce il numero di caratteri acquisiti, infatti il tipo restituito è un intero. Ti commento il codice:
codice:
#include <stdio.h>
#define MAXLINE 1000
/*
getline: Acquisisce una stringa da tastiera
Parametri:
s: puntatore al buffer in cui memorizzare i caratteri
uu: numero massimo di caratteri da acquisire
Valore restituito: numero di caratteri acquisiti
*/
int getline(char s[], int uu)
{
int c,i;
for (i=0; i<uu-1 && (c=getchar()) != EOF && c!= '\n'; ++i)
s[i] = c;
if (c == '\n')
{
s[i] = c;
++i;
}
s[i]='\0';
return i;
}
/*
copy: copia il contenuto di una stringa in un'altra stringa
Parametri:
to: stringa di destinazione
from: stringa di origine
Valore restituito: nessuno
*/
void copy (char to[], char from [])
{
int i;
i=0;
while ((to[i] = from[i]) != '\0')
++i;
}
/*
main: entrypoint dell'applicazione
Acquisisce una serie di stringhe da tastiera fino a quando l'utente non inserisce una
stringa vuota e mostra la stringa più lunga inserita
*/
main ()
{
int len; /* lunghezza della stringa appena acquisita da tastiera */
int max; /* lunghezza della stringa più lunga finora inserita (quindi lunghezza di longest)
char line [MAXLINE]; /* stringa appena acquisita da tastiera */
char longest [MAXLINE]; /* stringa più lunga finora inserita */
max=0; /* inizializza max */
/* Ciclo ripetuto finché l'utente non preme Invio senza inserire caratteri (nel qual caso la funzione getline restituisce 0 e il ciclo termina)
In questa istruzione avvengono diverse cose:
1. viene acquisita una stringa da tastiera, memorizzandola nell'array di caratteri line;
2. il valore restituito da getline (ossia la lunghezza della stringa acquisita) viene memorizzato in len, che quindi ora conterrà la lunghezza di line;
3. il valore di len viene confrontato con 0: se è maggiore di 0 il ciclo che segue viene eseguito.
*/
while ((len = getline(line, MAXLINE)) >0)
{
/* se la lunghezza della stringa acquisita è maggiore di quella della stringa fino ad ora più lunga... */
if (len > max)
{
/* ... memorizza in max il valore di len, ossia la nuova lunghezza di longest, dal momento che ... */
max=len;
/* ... in longest ora viene copiata la stringa appena acquisita. */
copy(longest, line);
}
}
/* al termine del ciclo se sono state inserite parole visualizza la più lunga */
if (max >0)
printf ("%s", longest);
return 0;
}
.