Oppure

Loading
30/06/13 14:37
max912
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

aaa
30/06/13 15:23
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.....
30/06/13 16:34
max912
a me non compare niente..comunque in che senso è fatto a caso?
aaa
30/06/13 16:51
mmmh guarda bene il numero di argomenti passati alle funzioni e i tipi di argomenti........
04/07/13 8:27
moloskovic
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
aaa
04/07/13 13:04
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.......