Sto provando a scrivere per esercizio un programma che inverta l'ordine di un massimo di 10 righe di input, ci sono quasi riuscito, ma non riesco a capire perchè la variabile m si azzera ogni volta che viene chiamata la funzione reverse dal main, per essere precisi la riga che ho segnato in grassetto:
#include <stdio.h>
#define MAXCHAR 1000
#define MAXLINE 10
int getline(char s[MAXCHAR], int maxline)/*copia l'input econtrolla la lunghezza*/
{
int c,i;
for(i=0;i<maxline && (c=getchar())!=EOF && c!='\n';i++)
{
s[i]=c;
}
if(c=='\n')
{
s[i]=c;
i++;
}
return i;
}
int totchar(int len[]) /*trova il totale dei caratteri input*/
{
int i,tot;
tot=0;
for (i=0;i<MAXLINE && len[i]>1;i++)
tot=tot+len[i];
return tot;
}
void reverse(char ff[],char rev[],int len[],int m) /*ribalta l'ordine delle linee di input*/
{
int i,l,tc,initln[MAXLINE],nparole;
tc=totchar(len);
l=1;
nparole=0;
for (i=0;i<MAXLINE;i++)
initln[i]=0;
for (i=0;i<MAXLINE && len[i]>1;i++)
{
initln[l]=initln[l-1]+len[i]; /*calcola dove spezzare le righe di input*/
l++;
nparole=i;
}
for (i=0;i<MAXCHAR && rev[m-1]!='\n';i++)
{
rev[m]=ff[initln[nparole]+i];
m++;
printf("%d",m);
}
}
main()
{
int i,gl,len[MAXCHAR],m;
for (i=0;i<MAXLINE;i++)
len[i]=0;
i=m=0;
char ff[MAXCHAR],rew[MAXCHAR];
while(gl=getline(ff,MAXCHAR))
{
//salva in len la lunghezza delle righe
len[i]=gl;
[b]reverse(ff,rew,len,m);[/b]
i++;
}
rew[m]='\0';
printf("\n%s", rew);
return 0;
}
si può fare in modo che m++ della funzione reverse incrementi il suo valore senza ricominciare ogni volta da 0?