PDA

Visualizza la versione completa : [C]: Perchè questo errore?


Gmalex
16-02-2003, 10:20
Salve :ciauz:
Nel main ho dichiarato:



struct persona *rubrica;
FILE *myfile;


Sempre durante il main ho fatto:


crea("creare",&myfile,&rubrica);


Il protipo della funzione main è:


void crea(char*,FILE*,struct persona*);


Mi da quest'errore:


[Warning] In function `main':
[Warning] passing arg 2 of `crea' from incompatible pointer type
[Warning] passing arg 3 of `crea' from incompatible pointer type


Perchè?

Grazie in anticipo. :ciauz:

Di seguito riporto tutto il codice completo:


/*
Nome: Rubrica
Autore: Gmalex
Descrizione: Piccola e semplice rubrica con varie funzionalità.
Date: 14/02/03 16.20
Copyright: ItaliOS
*/

#include <stdio.h>
#include <conio.h>
#include <string.h>

#define MAX_STRING 20

// Struttura portante: persona.

struct persona {
unsigned int id;
char nome[MAX_STRING];
char cognome[MAX_STRING];
int telefono[MAX_STRING];
int cellulare[MAX_STRING];
int indirizzo[MAX_STRING+30];
char lavoro[MAX_STRING+30];
};

// Prototipi delle funzioni

void title(void);
void crea(char*,FILE*,struct persona*);
void gestisci(char*,FILE*,struct persona*);


// Programma

int main() {
// Dichiaro la rubrica
struct persona *rubrica;
FILE *myfile;
// Altre variabili
char decisione;
do {
title();
printf("\n\tA - Creare una nuova rubrica.\n\tB - Aprire una rubrica gia esistente\n\tZ - Uscire\n");
printf("\n\t Scelta: ");
scanf("%c", &decisione);
fflush(stdin);
switch(decisione) {
case 'a':
case 'A':
crea("creare",&myfile,&rubrica);
break;
case 'b':
case 'B':
crea("aprire",&myfile,&rubrica);
break;
case 'z':
case 'Z':
return 0;
break;
default:
printf("\nInserire un valore corretto!");
break;
}
} while (!((decisione == 'Z') || (decisione == 'z')));
return 0;
}

// Visualizzazione del titolo

void title() {
clrscr;
printf("\n\t\tRUBRICA\n");
}

// Routine di apertura della rubrica

void crea(char *modo, FILE *myfile, struct persona *rubrica ) {
char nome[MAX_STRING+10];
do {
clrscr;
printf("\nInserisci il nome della rubrica da %s (MAX 20 caratteri): ",modo);
scanf("%s",nome);
if ((strlen(nome) <= 0) || (strlen(nome) > MAX_STRING))
printf("\nNome troppo lungo/corto, inserire un nome corretto.");
else {

switch (modo[0]) {
case 'c':
myfile = fopen(nome,"w+");
break;
myfile = fopen(nome,"a+");
}
gestisci(nome,myfile,rubrica);
}
} while (!((strlen(nome) >= 0) || (strlen(nome) <= MAX_STRING)));

}

// Gestione della rubrica aperta

void gestisci(char *nome,FILE *myfile,struct persona *rubrica) {
char decisione;
void add() {
}
void del() {
}
void find() {
}
void edit() {
}
void view() {
}
// Funzione per portare maiuscoli tutti i caratteri di una stringa
char *upcase(char* stringa){
int i;
for (i = 0; stringa[i] != '\0'; i++)
stringa[i] = toupper(stringa[i]);
return stringa;
}
// Visualizzazione titolo interno
void title() {
clrscr;
printf("\n\t\t%s\n",upcase(nome));
}
// Inizio
do {
title();
printf("\n\n\t\tA - Per visualizzare la rubrica.\n\tB - Per aggiungere un nominativo.\n\tC - Per cancellare un nominativo.\n\tD - Per cercare un nominativo.\n\tE - Per modificare un nominativo già esistente.\n\tZ - Per tornare al menu principale.");
printf("\n\t\t Scelta: ");
scanf("%c", &decisione);
fflush(stdin);
switch(decisione) {
case 'a':
case 'A':
view();
break;
case 'b':
case 'B':
add();
break;
case 'c':
case 'C':
del();
break;
case 'd':
case 'D':
find();
break;
case 'e':
case 'E':
edit();
break;
case 'z':
case 'Z':
printf("\nTorno al menu principale...\n");
break;
default:
printf("\nInserire un valore corretto!");
break;
}
} while (!((decisione == 'Z') || (decisione == 'z')));
}

Gmalex
16-02-2003, 10:47
o cavolo, l'identazione non la visualizza....dho'

r0x
16-02-2003, 15:45
Ciao gimma! :D Non ci vogliono i & nei parametri attuali ..

Gmalex
16-02-2003, 19:16
We r0cs! grazie ^___^
PS: cmq avevo gia risolto :gren:
Ci vediamo in irc :P

Loading