Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema su un programma per rubrica telefonica
Forum - C/C++ - problema su un programma per rubrica telefonica

Avatar
max912 (Normal User)
Newbie


Messaggi: 6
Iscritto: 28/02/2013

Segnala al moderatore
Postato alle 16:37
Domenica, 30/06/2013
Salve a tutti, facendo questo programma in C sulla gestione di una rubrica telefonica, mi da questi problemi che non riesco a risolvere e non capisco dove sbaglio:

rubrica.c: In function ‘main’:
rubrica.c:38:3: error: too few arguments to function ‘ricper’
rubrica.c:13:6: note: declared here
rubrica.c: In function ‘canper’:
rubrica.c:109:2: error: too few arguments to function ‘cerper’
rubrica.c:73:6: note: declared here
rubrica.c:120:2: error: too many arguments to function ‘canper’
rubrica.c:97:6: note: declared here

DI SEGUITO POSTO TUTTO IL CODICE :

#include <stdio.h>
#include <string.h>
#define DIM 10
struct persona{
    char nome[10];
    char cognome[15];
    int cellulare;
    char mansione[20];
    };
struct persona rubrica;
FILE *fp;
void insper(void);
long ricper(char *nm, char *cg , int *numtel);
void canper(void);
void eliper(long pos);
void visper(void);
void visrub(void);

int main(){
int scelta, *numtel;
char *nm, *cg;
        printf("\n BENVENUTI\n");
        printf("\n 1. Inserimento nuova scheda");
        printf("\n 2. Ricerca persona");
        printf("\n 3. Cancella persona");
        printf("\n 4. Visualizza rubrica ");
        printf("\n 0. Per uscire\n\n");
        printf("\n Scegliere una delle seguenti opzioni:  ");
        scanf("%d", &scelta);
switch (scelta){
    case 0:
        printf("\n Grazie e arrivederci..\n");
    break;
    case 1:
        insper();
    return main();
    case 2:
        ricper();
    break;
    return main();
    case 3:
        canper();
    return main();
    case 4:
        visper();
    break;
    return main();
    default:
    break;
    }
}
/* inserisce persona nel file rubrica.txt */
void insper(void){
    char invio;
    FILE *fp;
    fp = fopen("rubrica.txt", "a+");
    printf("\n\t\t INSERIMENTO PERSONA");
    printf("\n\t\t---------------\n\n");
    printf("Nome:  ");
    gets(rubrica.nome);
    printf("Cognome:  ");
    gets(rubrica.cognome);
    printf("Numero cellulare:  ");
    scanf("%d", &(rubrica.cellulare));
    printf("Mansione:  ");
    gets(rubrica.mansione);
    scanf("%c", &invio);
    
    fwrite(&rubrica, sizeof(struct persona),1, fp);
    fclose(fp);
    }
/* RICERCA UNA PERSONA DALLA RUBRICA SE PRESENTE */
long cerper(char *nm, char *cg, int numtel){
    int n;
long pos = 0L;

    fp= fopen("rubrica.txt", "a+");
    
    for(;;) {
    n = fread(&rubrica, sizeof(struct persona), 1, fp);
    if (n=0) {
        fclose(fp);
        pos = -1;
        return (pos);
    }
    else
        if(strcmp(cg, rubrica.cognome) == 0)
            if (strcmp(nm, rubrica.nome) == 0)
                if(numtel == rubrica.cellulare) {
            pos = ftell(fp);
                    fclose(fp);
            return(pos-sizeof(struct persona));
        }
    }
}
/* CANCELLA UNA PERSONA DALLA RUBRICA SE PRESENTE */
void canper(void){
    char pausa;
    char cognome[15], nome[10];
    long pos;
    printf("\n\t\tCANCELLAZIONE PERSONA DALLA RUBRICA");
    printf("\n\t\t---------------\n\n");
    printf("Nome:  ");
    gets(nome);
    printf("Cognome:  ");
    gets(cognome);    
    scanf("%c", &pausa);
    /* invoco la funzione ricerca persona */
    pos = cerper(nome, cognome);
    if(pos == -1) {
        printf("Persona non presente nella rubrica");
        scanf("%c", &pausa);
        return;
}
/* invoco la funzione visualizza persona */
visper();
printf("Confermi cancellazione? (s/n)");
scanf("%c", &pausa);
    if(pausa == 's') {
    canper(pos);
    return;
    }
}
/* Visualizza persona */
void visper(void){
    printf("Nome:   %s", rubrica.nome);
    printf("Cognome:  %s", rubrica.cognome);
    printf("Numero telefonico:  %d", (rubrica.cellulare));
    printf("Mansione:  %s", rubrica.mansione);
}
/* visualizza rubrica completa */
void visrub(void){
    int n; char pausa;
    fp = fopen("rubrica.txt", "r");
    do {
        n = fread(&rubrica, sizeof(struct persona), 1, fp);
        if( n==0) fclose(fp);
        else {
            visper();
            scanf("%c", &pausa);
        }
    }
    while(n=!0);
}

spero potrete aiutarmi perche fra 10 giorni ho un esame  :d


PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:23
Domenica, 30/06/2013
Questo codice mi pare tanto.......... come dire........ a caso, fai un ctrl + F col browser su questa pagina e guarda tutte le volte che appare canper ..... noterai qualcosa di strano.....

PM Quote
Avatar
max912 (Normal User)
Newbie


Messaggi: 6
Iscritto: 28/02/2013

Segnala al moderatore
Postato alle 18:34
Domenica, 30/06/2013
a me non compare niente..comunque in che senso è fatto a caso?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:51
Domenica, 30/06/2013
mmmh guarda bene il numero di argomenti passati alle funzioni e i tipi di argomenti........

PM Quote
Avatar
moloskovic (Member)
Newbie


Messaggi: 3
Iscritto: 04/07/2013

Segnala al moderatore
Postato alle 10:27
Giovedì, 04/07/2013
Fatti due o tre programmini, bisognerebbe cominciare ad imparare cosa vuole dirti il compilatore quando ti dà certi errori, visto che fortunatamente non ci mette parole a caso ;)
"too few argument to function..." significa che nella dichiarazione della funzione hai messo più parametri di quanti ne hai passati chiamandola. se crei una funzione: int funzione (int arg1, int arg2...int argn), nel momento in cui la chiami devi passare n valori come parametri, nè uno meno, nè uno più.
Ti do un ulteriore indizio:
//prototipo
long ricper(char *nm, char *cg , int *numtel);  // 3 parametri
//chiamata
ricper(); //0 parametri

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 15:04
Giovedì, 04/07/2013
comunque fatto a caso perchè mi pare strano che un programmatore che scrive funzioni con tanto di puntatori poi le richiami senza passare gli argomenti.......

PM Quote