|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
[FILE C]Ho qualche problemino
Raga non riesco a capire gli errori di questo listato:
#include "stdafx.h" #include <stdio.h> struct iscrizione { char nickname[10]; char email[50]; char password[10]; char ripeatpassword[10]; }; struct accesso { char nickname[10]; char password[10]; }; struct nuovo_admin { char nome[50]; char cognome[50]; char anni[5]; char nickname[10]; char password[10]; char ripetipassword[10]; char email[50]; }; typedef struct iscrizione registrazione; typedef struct accesso login; typedef struct nuovo_admin new_admin; //Prototipi void new_account(registrazione, FILE *); int main(int argc, char* argv[]) { FILE *fp; registrazione reg; int scelta; do { printf("\n Sistem Login Tournament"); printf("\n 1)Crea Nuovo Account"); printf("\n 2)Login"); printf("\n 3)Password Smarrita"); printf("\n 0)Uscita"); printf("\n Scelta: "); scanf ("%d",&scelta); switch(scelta) { case 1: new_account(reg,fp); break; case 2: break; case 3: break; case 0: break; default: printf("\nErrore: Opzione Inesistente!!"); } } while(scelta!=0); return 0; } //Funzioni void new_account(registrazione reg, FILE *fp) { printf("\n Creazione Nuovo Account"); printf("\nNickname (MAX 10): "); gets (reg.nickname); printf("\nPassword: "); gets (reg.password); printf("\nRipeti Password: "); gets (reg.ripeatpassword); printf("\nE-Mail: "); gets (reg.email); } fp=fopen("iscrizione.txt","at"); if(fp!=NULL) fwrite(®istrazione,sizeof(registrazione),1,fp); else printf("\nErrore di scrittura, prova a rieseguire l'operazione"); fclose(fp); } Mi da questi errori: "error C2501: 'fp' : missing storage-class or type specifiers C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(79) : error C2440: 'initializing' : cannot convert from 'struct _iobuf *' to 'int' This conversion requires a reinterpret_cast, a C-style cast or function-style cast C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(80) : error C2143: syntax error : missing ';' before 'if' C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(82) : error C2143: syntax error : missing ';' before 'else' C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(84) : error C2501: 'fclose' : missing storage-class or type specifiers C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(84) : error C2373: 'fclose' : redefinition; different type modifiers c:\programmi\microsoft visual studio\vc98\include\stdio.h(285) : see declaration of 'fclose' C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(86) : error C2143: syntax error : missing ';' before '}' C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(86) : error C2143: syntax error : missing ';' before '}' C:\Programmi\Microsoft Visual Studio\Progetti\Account\Account.cpp(86) : error C2143: syntax error : missing ';' before '}' Error executing cl.exe." Dove sbaglio? Ultima modifica di Gogeta ss4 : 05-05-2004 alle 19:35. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
ho risolto facendo una variabile d'appoggio del tipo: registrazione reg;
Ho un altro problema Ultima modifica di Gogeta ss4 : 05-05-2004 alle 19:35. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 252
|
La prima cosa che salta all'okkio è che le ultime tre righe
fp=fopen("gestione_account/iscrizione.txt","a"); fwrite(®istrazione,sizeof(registrazione),1,fp); fclose(fp); sono fuori dalla funzione account che si chiude con la graffa subito sopra ma dovrebbero cmq appartenere al main penso poiche' fp è dichiarato localmente là. Poi per le struct io avrei tentato la dichiarazione in un altro modo Esempio per struct accesso typedef struct{ char nickname[10]; char password[10]; } accesso; e poi normalmente avrei istanziato accesso login; nel main |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Quote:
Adesso mi da solo un errore |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2004
Messaggi: 252
|
Ah risolto allora nada...hai modificato il codice ke c'era prima nel post xo' ??....xke' senno' mi sono inventato quello he mi sono ricopiato prima...
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
L'errore l'ho risolto e il programma parte, però non so se gli scrivo correttamente la struttura dentro al file, ecco il pezzo di codice:
void new_account(registrazione reg, FILE *fp) { printf("\n Creazione Nuovo Account"); printf("\nNickname (MAX 10): "); fflush(stdin); gets (reg.nickname); printf("\nPassword: "); fflush(stdin); gets (reg.password); printf("\nRipeti Password: "); fflush(stdin); gets (reg.ripeatpassword); printf("\nE-Mail: "); fflush(stdin); gets (reg.email); fp=fopen("iscrizione.txt","at"); if(fp!=NULL) fwrite(®,sizeof(reg),1,fp); else printf("\nErrore di scrittura, prova a rieseguire l'operazione"); fclose(fp); } registrazione sarebbe struct iscrizione e reg sarebbe registrazione reg; E' giusto?? |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Ho fatto una prova è funzia!!!
E dire che ancora a scuola di struttura con i file non me le hanno spiegate |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Bene
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
visto che sapete darmi delle ottime soluzioni volevo chiedervi un'altra cosa.
Allora sto facendo la funzione di login, ovvero l'utente inserisce nickname e password e poi vado a ricercare se sono corrette e se si lo faccio accedere alla sua area. allora mi consigliate di scaricare le strutture da file su un vettore e poi eseguire una ricerca su vettore, oppure di fare tutto direttamente dentro il file? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Dipende da quante volte devi ricercare il dato...
Se lo devi cercare solo una volta (un solo login o login poco frequenti) allora non caricare un vettore, ma cerca l'utente man mano scorrendo il file... Se la ricerca la devi fare spesso e devi, magari, fare altre operazioni sui record conviene tenere tutto in un vettore in memoria... |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
ho optato per la ricerca interna al file.
Adesso sto confrontando la password nel campo password che è una stringa con la password immessa che è una stringa, non posso scrivere: if(reg.password==password) ?? Devo usare strcmp?? |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì, devi usare strcmp...
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
while((reg.nickname!=nickname)&&(!feof(fp)))
if(controllo=(strcmp(reg.password, password)))==0) printf("\nSistema Di Login Eseguito Correttamente"); Mi da questo errore e non riesco a capire perchè error C2143: syntax error : missing ';' before '==' |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Avevo dimenticato una parentesi
Però non funziona mi fa un ciclo infinito dicendo sempre Nickname o password diversi, ecco il codice: void log_in(FILE *fp,login log,registrazione reg) { int controllo; char nickname[10],password[10]; fp=fopen("iscrizione.txt","rt"); printf("\nNickname: "); fflush(stdin); gets (nickname); printf("Password: "); fflush(stdin); gets (password); while((reg.nickname!=nickname)&&(!feof(fp))) if((controllo=(strcmp(reg.password, password)))==0) printf("\nSistema Di Login Eseguito Correttamente"); else printf("\nNickname O Password Errati!!"); fclose(fp); |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Codice:
controllo = 1;
while(controllo && !feof(fp))
controllo = strcmp(reg.password, password);
if(!controllo)
printf("\nSistema Di Login Eseguito Correttamente");
else
printf("\nNickname O Password Errati!!");
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Allora ho rifatto la funziona in questo modo:
void log_in(FILE *fp,login log,registrazione reg) { int controllo=1,n; char nickname[10],password[10]; fp=fopen("iscrizione.txt","rt"); printf("\nNickname: "); fflush(stdin); gets (nickname); printf("Password: "); fflush(stdin); gets (password); while(!feof(fp)) { n=fread(®,sizeof(reg),1,fp); if(n==0) { printf("\nNickname Inesistente, prova a registrarlo e riprova"); fclose(fp); } else { while((reg.nickname!=nickname)) if((controllo=(strcmp(reg.password, password)))==0) printf("\nSistema Di Login Eseguito Correttamente"); else printf("\nNickname O Password Errati!!"); } } fclose(fp); } Allora mi roconosce correttamente se la pass è giusta o no, però non riesco a capire perchè mi fa un ciclo infinito con scritto : Sistema di login corretto se la pass è giusta, oppure mi fa il ciclo infinito che scrive Nickname o password errati se la pass è errata. Dove sbaglio?? |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Qui: while((reg.nickname!=nickname))
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
e come lo modifico? ho provato a fare così:
trovato=0; while((reg.nickname!=nickname)&&(trovato==0)) if((controllo=(strcmp(reg.password, password)))==0) { printf("\nSistema Di Login Eseguito Correttamente"); trovato=1; } else printf("\nNickname O Password Errati!!"); Però mi da sempre lo stesso errore Come dovrei impostare quel while? |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non capisco a cosa ti serve quel while...
Codice:
controllo = 1;
while(controllo && !feof(fp))
{
n=fread(®,sizeof(reg),1,fp);
if(n>0) /*effettuo il controllo sui dati*/
controllo = strcmp(reg.password, password) ||
strcmp(reg.nickname, nickname);
}
if(!controllo) /*se il controllo ha avuto successo controllo == 0*/
printf("\nSistema Di Login Eseguito Correttamente");
else
printf("\nNickname O Password Errati!!");
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
funziona!!
Mi spieghi un po che non ho capito bene ?? |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:12.



















