ecco un'altro programmino didattico che mi fa sclerare,
si tratta di introdurre caratteri da tastiera, il pc memorizza riga in vettore alla pressione di enter,
la confronta con altre righe memorizzate, se è piu lunga la memorizza in altro vettore,
quando trova EOF stampa su video la riga piu lunga:
ecco il sorgente:
Codice: Seleziona tutto
#include <stdio.h>
#define MAXLINE 100
main()
{
int len; /* lungh riga corrente*/
int max; /*lungh riga massima*/
char line[MAXLINE]; /*riga di input*/
char save[MAXLINE]; /*riga salvata lunghezza maggiore*/
max = 0; /*azzera lungh max*/
while ((len = leggeriga(line, MAXLINE)) > 0)
if (len > max) {
max = len;
copia(line, save);
}
if (max > 0) /*se c'è almeno una riga stampa su video la riga max*/
printf("%s", save);
}
/*function leggeriga*/
leggeriga (s, lim)
char s[]; /*legge caratteri immessi da tastiera ed memorizza linea alla pressione di enter*/
int lim; /* finchè non incontra EOF*/
{
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);
}
/*function copia*/
copia (s1, s2) /* copia riga più lunga in save */
char s1[];
char s2[];
{
int i;
i = 0;
while (s2[i] = s1[i] != '\0')
++i;
lo compilo e apparentemente sembra tutto ok, lo eseguo nel terminale, parte e finisce senza errori apparenti, ma l'output che stampa è indecifrabile
ecco cosa succede:
noidue@noidue-desktop:~/C_program/FunzioniSottoprg$ ./confrontarighe
pocipod
opèikpb
opècvopfipibpoibpoxbpoxibpx
noidue@noidue-desktop:~/C_program/FunzioniSottoprg$
al posto di stampare la riga arrivano i simboli strani..
dove SBAGLIO..?
>:(

