Newsgroup: it.comp.lang.c
Titolo: Definizione di funzione che non va...

E' un po' che non ci si sente e non vorrei seccarvi per 
delle stupidaggini
... solo che commetto degli errori che non trovo... :-( 
il codice sotto implementa (è praticamente un gioco)
l'algoritmo di Vigenere per crittare un messaggio; 
ma non è qui il problema, il problema è che non compila, 
e mi dà errore alla definizione della funzione vigen()  
Poi, potrei sbagliare qualcosa nella generazione della lista, 
ma non è importante, visto che l'ho scritta la' di getto, 
magari poi correggo, ma mi piacerebbe capire che 
cosa mi sfugge di grave nel prototipo di
funzione.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char nome_crittato[256];
char nome_chiaro[256];
int appoggio;/* N.B.: è un int per leggere l' EOF */
int kapp;
FILE *crittato, *chiaro;
struct chiave
{
	int data;
	struct chiave *next;
}
void  vigen(int *x,int k)
{
	*x = ( (*x + k) %256);
}
int main(int argc, char *argv[]) 
{
	struct chiave *key, *key_start;
	if( argc == 1 )
{
      /* 		
			Modalità interattiva
		( Niente parametri da riga di comando )
 
      */	
      printf("\tInserire nome del file da crittare\n");
      fgets( nome_chiaro, 256, stdin );
      fputs( nome_chiaro, stdout );
      printf("\tInserire nome del file su cui scrivere\n");
      fgets( nome_crittato, 256, stdin );
      fputs( nome_crittato, stdout );
    }
  else if( argc != 3) 
    {
      printf("\tUtilizzo: 
	      \nvigenere <file in chiaro>
<file di output crittato>");
	     exit(0);
    }
 
  else
    {
      strcpy(nome_chiaro, argv[1]);
      strcpy(nome_crittato, argv[2]);	
      if ( crittato = fopen( nome_crittato, "wt" ) )	 
 
	{
 
      if ( chiaro = fopen( nome_chiaro, "rt" ) )
 
	{
		/* Inizializzo la struttura	*/
		key_start = malloc (sizeof(struct chiave));
		key = key_start;
		/*				*/
 
	printf("Inserire la chiave per crittare 
terminando la sequenza con ^D (Control+D)");
 
	while( kapp = getc(stdin) != '$' )
	{
		key -> data = kapp;
		key -> next = ( malloc( sizeof(struct chiave) ) );
		key = key->next;	
	}
 
/*	Fine generazione lista		*/	
/*   Inizio Crittazione 	*/
 
	while(( appoggio = getc(chiaro)) != EOF )
	{	
 
	if(key->next)
	{ 
		vigen(&appoggio, key->data);
		key = key->next;
	}
 
	else
	{
		vigen(&appoggio, key_start->data);
		key = key->next;
	}
 
			fputc(appoggio, crittato);
		}/*	while	*/
/*   Fine crittazione     	*/		
	}
	}
    } 
fclose(chiaro);
fclose(crittato);
}
-- 
_____
http://theunixplace.com/~entropia/index.html_____
 
  Mutationem motus proportionalem esse vi impressae 
et fieri secundum lineam rectam qua vis illa imprimitur
	I. N.

 }
ATTENZIONE! Secondo me l'errore sta nel fatto che non hai messo il punto e
virgola dopo la parentesi graffa chiusa dello struct.
Perdonatemi se sbaglio, sono un nubbio di questo linguaggio.

 }
Manca il ; alla fine della dichiarazione della struct!
 
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"L'abilita` politica e` l'abilita` di prevedere quello che
 accadra` domani, la prossima settimana, il prossimo mese e
 l'anno prossimo. E di essere cosi` abili, piu` tardi,
 da spiegare  perche' non e` accaduto."

 while( kapp = getc(stdin) != '$' )
Qui un'altra svista: kapp = getc(stdin) deve andare fra parentesi.
Maurizio.