Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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
()
Newbie
Messaggi: Iscritto:
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.....
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
()
Newbie
Messaggi: Iscritto:
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.......