Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]: Perchè questo errore?

    Salve
    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.

    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')));
    }

  2. #2
    o cavolo, l'identazione non la visualizza....dho'

  3. #3
    Ciao gimma! Non ci vogliono i & nei parametri attuali ..

  4. #4
    We r0cs! grazie ^___^
    PS: cmq avevo gia risolto :gren:
    Ci vediamo in irc :P

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.