PDA

Visualizza la versione completa : Warnings


kaiyu
04-01-2009, 16:01
Ciao ragassi, ho creato un semplice programma per la "gestione" di un ristorante. Purtroppo durante la compilazione mi dà diversi warning...non riesco ad "aggiustarli", sapete individuarli e correggerli? grazie grazie grazie...vi posto prima i warnings e poi il programma.


ristorante.c: In function ‘main’:
ristorante.c:19: warning: passing argument 1 of ‘stampamenu’ from incompatible pointer type
ristorante.c:37: warning: passing argument 1 of ‘stampamenu’ from incompatible pointer type
ristorante.c: In function ‘inserisci’:
ristorante.c:82: warning: ‘return’ with a value, in function returning void
ristorante.c: In function ‘conto’:
ristorante.c:119: warning: ‘return’ with a value, in function returning void
ristorante.c: In function ‘menuristo’:
ristorante.c:149: warning: ‘return’ with a value, in function returning void



#include <stdio.h>
#include <stdlib.h>

int stampamenu( const char [][50] );
void inserisci();
void conto();
void menuristo();

int main(){

int i, j, scelta;

char menu[][50]={
{"1) Inserisci nuove pietanze nel menu"},
{"2) Fai il conto"},
{"3) Stampa a video il menu"},
{"0) Esci"}
};
scelta = stampamenu(menu);
while(scelta!=0){
switch(scelta){
case 1:
system("clear");
inserisci();
break;
case 2:
menuristo();
conto();
break;
case 3:
menuristo();
break;
default:
printf("\nScelta non corretta! Riprova!\n\n");
break;
}
scelta=stampamenu(menu);
}
return 0;
}

int stampamenu( const char menu[][50] ){

int i, select;

printf("\n\t---------------\n\tMENU OPERAZIONI\n\t---------------\n\n");

for( i=0; i<4; i++)
printf("%s\n", menu[i]);

printf("\nScegli: ");
scanf("%d", &select);

return select;
}

void inserisci(){

struct Menu{
int numero;
char nome[25];
float prezzo;
};

struct Menu menu={ 0, "", 0.0};
FILE *ptr;
int i;

if((ptr=fopen("menu.dat", "ab"))==NULL)
printf("\nImpossibile aprire il file.\n\n");
do{
printf("\n\nInserisci i dati richiesti.\nPer terminare inserisci 0 nei campi.\n");
printf("\nNumero pietanza: ");
fscanf(stdin, "%d", &menu.numero);
printf("\nNome pietanza: ");
fscanf(stdin, "%s", menu.nome);
printf("\nPrezzo pietanza: ");
fscanf(stdin, "%f", &menu.prezzo);
fwrite( &menu, sizeof(struct Menu), 1, ptr);
} while(menu.numero!=0);
fclose(ptr);
return 0;
}


void conto(){

struct Menu{
int numero;
char nome[25];
float prezzo;
};

struct Menu menu={ 0, "", 0.0};

float totale=0;
int number;

FILE *ptr;

printf("\nInserisci i numeri delle pietanze per fare il conto.\nInserisci zero per il totale.\n\nNumero: ");
scanf("%d", &number);

while(number!=0){
if((ptr=fopen("menu.dat", "rb"))==NULL)
printf("\n\nImpossibile aprire il file.\n\n");

while(!feof(ptr)){
fread( &menu, sizeof(struct Menu), 1, ptr);
if(number==menu.numero) totale=totale+menu.prezzo;
}
printf("\n + ");
scanf("%d", &number);
}
fclose(ptr);
printf("\n_____________________\n");
printf("\nTotale: %.2f", totale);
printf("\n\nGrazie e arrivederci!\n\n");
return 0;
}

void menuristo(){

struct Menu{
int numero;
char nome[25];
float prezzo;
};

FILE *ptr;

struct Menu menu = { 0, "", 0.0 };

if((ptr=fopen("menu.dat", "rb"))==NULL)
printf("\nImpossibile aprire il file cliente.dat\n\n");
else{
system("clear");
printf("\n%-15s%-16s%-11s\n", "Numero", "Nome", "Prezzo");


while(!feof(ptr)){
fread( &menu, sizeof(struct Menu), 1, ptr);
if(menu.numero!=0)
printf("%-15d%-16s%-11.2f\n", menu.numero, menu.nome, menu.prezzo);
}

fclose(ptr);
}
return 0;
}

MrX87
04-01-2009, 16:48
Ciao ho dato uno'cchiata al codice che hai postato:
1) innanzi tutto la prossima volta posta il codice tra i tag di codice come prevede il forum;
2) ho corretto un pò i wanrings che ti segnalava e ho dato un'occhiata e ho notato qualche errorino:
2a) quando dichiari la matrice menu devi specificare la dimensione quindi devi scrivere:


char menu[4][50]

2b)altro errore, quando passavi la matrice menu, la dichiaravi nel prototipo const, e in questo caso non serve a molto in quanto non stai programmando in maniera modlare su più file! ma se proprio vuoi dichiararla const devi dichiarare anche la matrice menu const nel main:


const char menu[4][50]

2c)infine c'era qualche errore sui return delle funzioni, in quanto hai dichiarato delle funzioni void ma poi nel loro interno facevi un return 0; che non era effettuabile in quanto le funzioni erano void e non dovevano ritornare niente, quindi bastava mettere solo return.

un'ultima cosa, la system call per ripulire lo shermo è:


system("cls");


per maggiori info posto il codice corretto( almeno compila, poi non so se fa quello che dovrebbe fare)


#include <stdio.h>
#include <stdlib.h>

int stampamenu( const char [][50] );
void inserisci();
void conto();
void menuristo();

int main(){

int i, j, scelta;

const char menu[4][50]={
{"1) Inserisci nuove pietanze nel menu"},
{"2) Fai il conto"},
{"3) Stampa a video il menu"},
{"0) Esci"}
};
scelta = stampamenu(menu);
while(scelta!=0){
switch(scelta){
case 1:
system("cls");
inserisci();
break;
case 2:
menuristo();
conto();
break;
case 3:
menuristo();
break;
default:
printf("\nScelta non corretta! Riprova!\n\n");
break;
}
scelta=stampamenu(menu);
}
return 0;
}

int stampamenu( const char menu[][50] ){

int i, select;

printf("\n\t---------------\n\tMENU OPERAZIONI\n\t---------------\n\n");

for( i=0; i<4; i++)
printf("%s\n", menu[i]);

printf("\nScegli: ");
scanf("%d", &select);

return select;
}

void inserisci(){

struct Menu{
int numero;
char nome[25];
float prezzo;
};

struct Menu menu={ 0, "", 0.0};
FILE *ptr;
int i;

if((ptr=fopen("menu.dat", "ab"))==NULL)
printf("\nImpossibile aprire il file.\n\n");
do{
printf("\n\nInserisci i dati richiesti.\nPer terminare inserisci 0 nei campi.\n");
printf("\nNumero pietanza: ");
fscanf(stdin, "%d", &menu.numero);
printf("\nNome pietanza: ");
fscanf(stdin, "%s", menu.nome);
printf("\nPrezzo pietanza: ");
fscanf(stdin, "%f", &menu.prezzo);
fwrite( &menu, sizeof(struct Menu), 1, ptr);
} while(menu.numero!=0);
fclose(ptr);
return;
}


void conto(){

struct Menu{
int numero;
char nome[25];
float prezzo;
};

struct Menu menu={ 0, "", 0.0};

float totale=0;
int number;

FILE *ptr;

printf("\nInserisci i numeri delle pietanze per fare il conto.\nInserisci zero per il totale.\n\nNumero: ");
scanf("%d", &number);

while(number!=0){
if((ptr=fopen("menu.dat", "rb"))==NULL)
printf("\n\nImpossibile aprire il file.\n\n");

while(!feof(ptr)){
fread( &menu, sizeof(struct Menu), 1, ptr);
if(number==menu.numero) totale=totale+menu.prezzo;
}
printf("\n + ");
scanf("%d", &number);
}
fclose(ptr);
printf("\n_____________________\n");
printf("\nTotale: %.2f", totale);
printf("\n\nGrazie e arrivederci!\n\n");
return;
}

void menuristo(){

struct Menu{
int numero;
char nome[25];
float prezzo;
};

FILE *ptr;

struct Menu menu = { 0, "", 0.0 };

if((ptr=fopen("menu.dat", "rb"))==NULL)
printf("\nImpossibile aprire il file cliente.dat\n\n");
else{
system("cls");
printf("\n%-15s%-16s%-11s\n", "Numero", "Nome", "Prezzo");


while(!feof(ptr)){
fread( &menu, sizeof(struct Menu), 1, ptr);
if(menu.numero!=0)
printf("%-15d%-16s%-11.2f\n", menu.numero, menu.nome, menu.prezzo);
}

fclose(ptr);
}
return;
}

kaiyu
04-01-2009, 18:31
Sei un grande! Ha compilato tutto lisciamente!! grazie!!!
solo una cosa: uso

system("clear")

perchè lavoro su linux, forse cls è per windows, infatti su ubuntu il comando cls non funziona. Grazie 1000

MrX87
04-01-2009, 18:53
ah okay, non sapevo che lavoravi su linux! allora si è corretto! pardon

Loading