Har ett störande problem som måste lösas snarast... Jag klistrar med kodsnutten där det blir fel. Är det du visar utskriften i programmet eller hur txt filen ser ut? Det är så txt-filen ser ut. Om ni vill se hur min nySpelare samt spar-funktion ser ut så säg till. Förresten, i slutet efter man matat in sitt namn etc. så räknar jag upp antalSpelare igen innan jag sparar, kanske det ställer till det också? sparaFil-funktionen: Börja med att kolla vad som händer vid anropet till nySpelare, hur mycket ökas värdet antalSpelare vid varje anrop, var ändras värdet på antalSpelare (sök igenom koden), kontrollera värdet på antalSpelare genom att skriva ut det på ställen det kan ha ändrats eller kör programmet i en debugger och kolla. Okej, tackar för tipsen. Skall kolla det nu, så återkommer jag sen. Innan jag startar start() (denna funktion skriver ut en välkomsttext och meny) så anropas laddaFil(); Jag får ingen större klarhet i det, om du bifogar komplett källkod så kan jag prova och se om jag hittar felet. Här kommer hela källkoden: Det beror på att laddaFil försöker läsa ur den tomma filen, vilket gör att antalSpelare med ett och den första spelaren innehåller "nolldata". Kontrollera filstorleken inna du börjar läsa från filen (se nedan) så funkar det. Dock kraschar programmet när data lästs in och man avslutar det. Okej, tackar så mycket! :D Ska testa detta genast! Återkommer sen. Jag testade din kod och det funkar prima nu :) Det är dock en sak till att fixa till. Om jag skapar säg 2 användare direkt efter varandra, så sparas datan rätt. Sen väljer jag att avsluta spelet, starta upp det igen och då kommer den tomma spelaren med igen :( som spelare nr 3 och den "verkliga" spelare nr3 kommer som nr 4 i txt-filen. Jag klistrar in hur laddaFil() ser ut efter modifieringen, samt vad som skrivs ut i txt-filen då jag skapt 2 användare på raken, och sen avslutat cmd, startat det igen och skapat en till användare. Oj, lite slarvigt av mig, felet uppstår av samma orska som innan. Då behöver du inte kontrollera filstorleken utan du kan direkt kolla of du har nått filslutet i loopen. Så länge filen alltid avslutas med en radbrytning kan du lägga kontrollen efter alla inläsningarna, annars är det bara att flytta upp den. Se modifierad laddaFil nedan. YES!!!! :D Du anar inte vad glad jag är för att du löste mitt problem :D Tackar åter igen för hjälpen.Problem med inläsning från txt-fil
void laddaFil()
{
ifstream ladda("gissaTalSpelare.txt"); //Läser in data från filen
while(!ladda.eof()) //Så länge som filen ej är slut, dvs. det finns tecken att läsa in, forsätt loopa.
{
ladda>>array[antalSpelare].lognamn; //Denna rad läses in till array[antalSpelare].lognamn
ladda>>array[antalSpelare].fornamn; //Denna rad läses in till array[antalSpelare].fornamn
ladda>>array[antalSpelare].efternamn; //Denna rad läses in till array[antalSpelare].efternamn
ladda>>array[antalSpelare].losenord; //Denna rad läses in till array[antalSpelare].losenord
ladda>>array[antalSpelare].regDatum; //Denna rad läses in till array[antalSpelare].regDatum
ladda>>array[antalSpelare].konto; //Denna rad läses in till array[antalSpelare].konto
antalSpelare++; //Ökar antalet spelare med 1
}
ladda.close(); //Filen stängs för inläsning
}
Från början har jag inga användare i textfilen, men efter att jag skapat en och filen sparas, så blir det tokigt... Innan användarens data, så skapas 5 blankrader, och på den 6e finns det en 0:a. Sen sparas data för användaren, så här ser det ut:
gissaTalSpelare.txt (nedanstående rad är den första blankraden, 5e är innan 0):
0
JoaAnd
Joakim
Andersson
ÖXPwr
03/13/06
1000
Sen när jag skapar ytterligare en användare så blir det ännu en "tom" användare emellan :( Hur löser jag detta? Jag vet att det är uppräkningen av antalSpelare (variabel som håller reda på hur många spelare det finns i filen) som ställer till det, det är den som gör de tomma raderna. Men om jag tar bort uppräkningen, så skrivs användaren i filen över ifall man skapar en ny, dvs. kan man i så fall endast ha en registrerad användare åt gången :(
Programmet är en kommandotolksapplikation.
Väldigt tacksam för lösningsförslag!
Sv: Problem med inläsning från txt-fil
Sv:Problem med inläsning från txt-fil
Sv:Problem med inläsning från txt-fil
void sparaFil()
{
ofstream spara("gissaTalSpelare.txt");
if (spara.fail())
{
cout<<"\aFilen kunde inte sparas!"<<endl;
}
for (int i=0;i<antalSpelare;i++)
{
spara<<array[i].lognamn<<endl;
spara<<array[i].fornamn<<endl;
spara<<array[i].efternamn<<endl;
spara<<array[i].losenord<<endl;
spara<<array[i].regDatum<<endl;
spara<<array[i].konto<<endl;
}
spara.close();
}
nySpelare-funktion:void nySpelare()
{
header();
char dateStr[9],
fnamn[20],
enamn[20];
_strdate(dateStr);
string nickname,
str1,
str2;
cout<<"Ny Spelare"<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"Förnamn: ";
cin>>fnamn;
strcpy(array[antalSpelare].fornamn,fnamn);
cout<<endl;
cout<<"Efternamn: ";
cin>>enamn;
strcpy(array[antalSpelare].efternamn,enamn);
cout<<endl<<endl;
array[antalSpelare].regDatum = dateStr;
array[antalSpelare].konto = 1000;
cout<<"Du har tilldelats följande användarnamn och lösenord:"<<endl<<endl;
//Skapa användarnamn
fnamn[3]='\0'; //De tre första tecknen i förnamnet tas ut
enamn[3]='\0'; //De tre första tecknen i efternamnet tas ut
str1 = fnamn; //Det inmatade förnamnet tilldelas variabeln str1
str2 = enamn; //Det inmatade efternamnet tilldelas variabeln str2
nname = str1+str2; //Här konkateneras de sex tecknena
array[antalSpelare].lognamn = nname;
//Skapa lösenord
char pArray[86]="ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdefghijklmnopqrstuvwxyzåäö0123456789";
char password[86]="";
srand(static_cast<unsigned>(time(0))); //Behövs för att inte samma lösenord skall slumpas fram de andra gångerna
int length=5; //Lösenordets längd i antal tecken
for (int i=0; i<length; i++)
{
int j;
j = 0 + int(67.0 * rand()/(RAND_MAX+1.0));
password[i]= pArray[j];
pwrd = password;
array[antalSpelare].losenord = pwrd;
}
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"Användarnamn: "<<array[antalSpelare].lognamn<<endl;
cout<<"Lösenord: "<<array[antalSpelare].losenord<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"Var god anteckna ditt användarnamn och lösenord!"<<endl<<endl<<endl;
antalSpelare++; //Ökar antalet spelare med 1
system("pause");
sparaFil();
start();
}
antalSpelare är förresten en global int som är initierat värde 0 från start.
Sv: Problem med inläsning från txt-fil
/PeterSv:Problem med inläsning från txt-fil
Sv: Problem med inläsning från txt-fil
Jag raderade all information i gissaTalSpelare.txt, kompilerade och körde programmet. precis efter uppräkning av antalSpelare i laddaFil();, så cout:ar jag varje post i arrayen, dvs. array[antalSpelare].lognamn etc. I och med att jag inte har någon data i txt-filen nu, så skrevs följande ut i cmd:
//tom rad 1
//tom rad 2
//tom rad 3
//tom rad 4
//tom rad 5
0
Sedan så gick jag till nySpelare (valde detta vid menyn). Precis då nySpelare anropats cout:ade jag antalSpelare, och en 1:a skrevs upp på skärmen. Detta för jag räknade ju upp antalSpelare vid inläsning (och därav de tomma raderna och 0:an, men detta finns alltså inte i filen ännu). Okej, skapade en ny spelare och datan sparades i txt-filen och sen anropas start(); Där tryckte jag på "skapa ny spelare igen", för att komma till nySpelare där jag cout:ar antalSpelare. Nu skrivs det ut 2 på skärmen, detta på grund av att de tomma raderna lagts in före användaren i txt-filen. Så här ser alltså filen ut efter jag skapat en användare:
gissaTalSpelare.txt:
//tom rad 1
//tom rad 2
//tom rad 3
//tom rad 4
//tom rad 5
0
JoaAnd
Joakim
Andersson
2DSåR
03/13/06
1000
När jag stänger ner cmd och sen öppnar det igen och försöker logga in, så fungerar det inte. Då gjorde jag som så att jag tog bort de 5 blanka raderna och 0:an i txt-filen och sparade filen. Startade om cmd och nu fungerade det att logga in.
Jag skulle behöva lösa detta snarast, men vet inte hur. Någon som vet hur jag bör göra?Sv:Problem med inläsning från txt-fil
/PeterSv: Problem med inläsning från txt-fil
#include <iostream> //Hantering av in-/utströmmar
#include <fstream> //Filhanteringsströmmar
#include <iomanip> //Manipulering
#include <ctime> //Behövs för bl.a. rand-funktionen
#include <stdio.h> //Behövs för bl.a. datumfunktionen
#include <string.h> //Tillgång till string-klassen
#include <stdlib.h> //Behövs för bl.a. lösenordsslumpningen
#include <iodos.h> //Å,Ä,Ö i kommandotolken
using namespace std; //Användande av namnsrymd
//Strukturen SPELARE
struct SPELARE
{
string lognamn, //Lagrar användarnamn
losenord, //Lagrar lösenord
regDatum; //Lagrar registreringsdatum
int konto; //Lagrar värdet på pengar
char fornamn[20], //Lagrar förnamn
efternamn[20]; //Lagrar efternamn
};
SPELARE array[50]; //Initiering av en array med 50 poster av datatypen SPELARE
SPELARE aktivSpelare;
int svar, //Här sparas det tal man chansat på
gissning, //Här sparas antalet gissningar man köpt
val=0,
pris=10, //Så här mycket kostar en gissning
antal=0,
antalSpelare=0; //Så här många spelare har profiler i spelet
char restart;
string status, //Används för att mata ut +/- eller +- beroende på hur mycket man har på kontot
nname,
pwrd;
int tal; //Lagrar det framslumpade talet
int* p = &tal; //Pekaren p av datatypen int, pekar på (refererar till) variabeln tal
void laddaFil(), //Funktion som läser in data från filen gissaTalSpelare.txt
loggaIn(), //Har hand om inloggningen
profil(), //Visar den inloggade användarens profil
kopGissning(), //Visar upp menyn där man kan välja hur många gissningar man vill köpa
gissa(), //Det är denna funktion som har hand om själva gissningsförfarandet
startaOm(), //Efter att spelet tagit slut då man antingen gissat på rätt tal eller ens gissningar tagit slut, så skickas man till denna funktion.
uppdateraFil(), //Uppdaterar filen med färsk data från senaste programkörning
sparaFil(), //Sparar filen gissaTalSpelare.txt
header(), //Skriver ut själva huvudmallen
meny(), //Till denna meny kommer man enbart om efter man loggat in
topplista(),
nySpelare(); //Vid skapande av ny spelare kommer man hit
string start(); //Detta är själva huvudmenyn. Detta är en returnerande funktion pga. man skall kunna terminera programmet från menyn.
void laddaFil()
{
ifstream ladda("gissaTalSpelare.txt"); //Läser in data från filen
while(!ladda.eof()) //Så länge som filen ej är slut, dvs. det finns tecken att läsa in, forsätt loopa.
{
ladda>>array[antalSpelare].lognamn; //Denna rad läses in till array[antalSpelare].lognamn
ladda>>array[antalSpelare].fornamn; //Denna rad läses in till array[antalSpelare].fornamn
ladda>>array[antalSpelare].efternamn; //Denna rad läses in till array[antalSpelare].efternamn
ladda>>array[antalSpelare].losenord; //Denna rad läses in till array[antalSpelare].losenord
ladda>>array[antalSpelare].regDatum; //Denna rad läses in till array[antalSpelare].regDatum
ladda>>array[antalSpelare].konto; //Denna rad läses in till array[antalSpelare].konto
antalSpelare++; //Ökar antalet spelare med 1
cout<<array[antalSpelare].lognamn<<endl;
cout<<array[antalSpelare].fornamn<<endl;
cout<<array[antalSpelare].efternamn<<endl;
cout<<array[antalSpelare].losenord<<endl;
cout<<array[antalSpelare].regDatum<<endl;
cout<<array[antalSpelare].konto<<endl;
system("pause");
}
ladda.close(); //Filen stängs för inläsning
}
string start()
{
header(); //Funktionsanrop
int startVal; //Håller värdet på menyvalet i denna funktion
cout<<"1. Logga in"<<endl;
cout<<"2. Ny användare"<<endl;
cout<<"3. Nollställ fil"<<endl;
cout<<"4. Avsluta"<<endl<<endl;
cin>>startVal;
cout<<endl;
switch(startVal)
{
case 1:
loggaIn();
case 2:
nySpelare();
case 3:
//nollstallFil();
case 4:
cout<<"Spelet kommer nu att avslutas."<<endl<<endl;
cout<<setfill('-')<<setw(80)<<" "<<endl;
system("pause");
system("cls");
return 0;
}
}
void loggaIn()
{
bool run=true;
while (run)
{
header();
cout<<"Användarnamn: ";
cin>>nname;
cout<<endl;
cout<<"Lösenord: ";
cin>>pwrd;
cout<<endl<<endl;
for(int i=0;i<antalSpelare;i++)
{
if (array[i].lognamn==nname && array[i].losenord==pwrd)
{
run=false;
aktivSpelare=array[i];
}
}
}
system("cls");
//system("pause");
meny();
}
void kopGissning()
{
header();
if(aktivSpelare.konto>0) //En selektion för ifall insatsen är mindre än 0, skriv - före pengarna behövs ej, då det automatiskt skrivs - framför pengarna redan då de dras av från kontot och det finns mindre än 0kr kvar.
{
status="+";
}
else if(aktivSpelare.konto==0)
{
status="+-";
}
for(int i=0;i<antalSpelare;i++)
{
cout<<"Status för spelkonto:"<<endl;
cout<<"---------------------"<<endl<<endl;
cout<<"SUMMA: "<<status<<aktivSpelare.konto<<"kr"<<endl<<endl<<endl;
cout<<"Prislista - Gissningar"<<endl;
cout<<"----------------------"<<endl;
cout<<"1. 10kr"<<endl;
cout<<"5. 50kr"<<endl;
cout<<"10. 100kr"<<endl<<endl;
cout<<"Hur många gissningar vill du köpa? (1,5,10)"<<endl<<endl;
cin>>gissning;
cout<<endl;
if(gissning==1||gissning==5||gissning==10)
{
cout<<"Du har köpt "<<gissning<<" gissningar för "<<gissning*pris<<"kr."<<endl<<endl;
aktivSpelare.konto = aktivSpelare.konto-(gissning*pris);
val=gissning; //Värdet på antal gissningar (dvs. det antal gissningar man köpt) tilldelas variabeln "val". Detta för att senare i koden kunna lägga till "rätt" summa pengar vid en vinst. Om jag inte gör så här, så går det ju inte köra t.ex. if(gissning==1), lägg till x kr på kontot. Detta på grund av att gissning minskas med 1 för varje fel tal man anger och om man t.ex. köpt fem gissningar, men träffar rätt på den 3:e, så har ju inte variabeln gissning värde 5 längre. Därav denna tjusiga lösning. Man kan säga att antalet köpta gissningar kopieras över till val, och val-variabeln ändrar ju inte värde, så det är denna variabel som används i selektionen längre ner i koden för att avgöra hur mycket pengar man vunnit.
cout<<"Du har nu "<<aktivSpelare.konto<<"kr kvar på kontot. Lycka till!"<<endl<<endl;
system("pause");
system("cls");
gissa();
}
else
{
cout<<endl;
cout<<"Ogiltigt antal gissningar!"<<endl<<endl;
cout<<"Var god vänta, programmet kommer nu startas om."<<endl<<endl;
system("pause");
system("cls");
kopGissning();
}
}
}
void gissa()
{
srand(time(0));
tal = rand()%50;
while(gissning>0)
{
for(int i=0;i<antalSpelare;i++)
{
if(val==1)
{
cout<<"Var god gissa på ett tal mellan 0 & 50"<<endl<<endl; cout<<tal;
cin>>svar;
cout<<endl;
cout<<"Du gissade på tal: "<<svar<<endl<<endl;
if(svar!=tal)
{
cout<<"Du lyckades tyvärr inte gissa rätt."<<endl<<endl;
cout<<"Det rätta talet var: "<<tal<<endl<<endl;
system("pause");
system("cls");
startaOm();
}
if(svar==tal)
{
aktivSpelare.konto=aktivSpelare.konto+(100*pris);
cout<<"Där satt den!"<<endl<<endl;
cout<<"Du har vunnit "<<100*pris<<"kr och har nu "<<aktivSpelare.konto<<"kr kvar på kontot!"<<endl<<endl;
system("pause");
system("cls");
startaOm();
}
}
cout<<"Du har "<<gissning<<" gissningar kvar."<<endl<<endl; cout<<tal;
cout<<"Var god gissa på ett tal mellan 0 & 50"<<endl<<endl;
cin>>svar;
cout<<endl;
cout<<"Du gissade på tal: "<<svar<<endl<<endl;
gissning--;
antal++;
if(svar>tal)
{
cout<<"Gissa på ett lägre tal!"<<endl<<endl;
cout<<setfill('-')<<setw(80)<<" ";
}
else if(svar<tal)
{
cout<<"Gissa på ett högre tal!"<<endl<<endl;
cout<<setfill('-')<<setw(80)<<" ";
}
if(gissning==0)
{
cout<<"Du lyckades tyvärr inte gissa rätt."<<endl<<endl;
cout<<"Det rätta talet var: "<<tal<<endl<<endl;
system("pause");
system("cls");
startaOm();
}
if(svar==tal)
{
cout<<setfill('-')<<setw(80)<<" ";
cout<<"Där satt den!"<<endl<<endl;
cout<<"Du gissade rätt på din "<<antal<<" gissning!"<<endl<<endl;
if(val==5)
{
aktivSpelare.konto=aktivSpelare.konto+(10*pris);
cout<<"Du har vunnit "<<10*pris<<"kr och har nu "<<aktivSpelare.konto<<"kr kvar på kontot!"<<endl<<endl;
system("pause");
system("cls");
startaOm();
}
else if(val==10)
{
aktivSpelare.konto=aktivSpelare.konto+(2*pris);
cout<<"Du har vunnit "<<2*pris<<"kr och har nu "<<aktivSpelare.konto<<"kr kvar på kontot!"<<endl<<endl;
system("pause");
system("cls");
startaOm();
}
}
}
}
}
void startaOm()
{
cout<<"Vill du spela igen? (y/n)"<<endl<<endl;
cin>>restart;
cout<<endl;
cout<<setfill('-')<<setw(80)<<" ";
cout<<endl;
if(restart=='n' || restart=='N')
{
cout<<"Spelet kommer nu att avslutas."<<endl<<endl;
cout<<setfill('-')<<setw(80)<<" "<<endl;
system("pause");
system("cls");
uppdateraFil();
meny();
}
else if(restart=='y' || restart=='Y')
{
cout<<"Var god vänta, spelet startas nu om."<<endl<<endl;
cout<<setfill('-')<<setw(80)<<" "<<endl<<endl;
system("pause");
system("cls");
uppdateraFil();
kopGissning();
}
}
void uppdateraFil()
{
for(int i=0;i<antalSpelare;i++)
{
if (aktivSpelare.lognamn==array[i].lognamn && aktivSpelare.losenord==array[i].losenord)
{
array[i].lognamn = aktivSpelare.lognamn;
strcpy(array[i].fornamn,aktivSpelare.fornamn);
strcpy(array[i].efternamn,aktivSpelare.efternamn);
array[i].losenord = aktivSpelare.losenord;
array[i].regDatum = aktivSpelare.regDatum;
array[i].konto = aktivSpelare.konto;
}
}
sparaFil();
}
void sparaFil()
{
ofstream spara("gissaTalSpelare.txt");
if (spara.fail())
{
cout<<"\aFilen kunde inte sparas!"<<endl;
}
for (int i=0;i<antalSpelare;i++)
{
spara<<array[i].lognamn<<endl;
spara<<array[i].fornamn<<endl;
spara<<array[i].efternamn<<endl;
spara<<array[i].losenord<<endl;
spara<<array[i].regDatum<<endl;
spara<<array[i].konto<<endl;
}
spara.close();
}
void profil()
{
header();
cout<<"Profil"<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl;
char profilVal;
cout<<"Användarnamn:"<<" "<<aktivSpelare.lognamn<<endl;
cout<<"Förnamn:"<<" "<<aktivSpelare.fornamn<<endl;
cout<<"Efternamn:"<<" "<<aktivSpelare.efternamn<<endl;
cout<<"Lösenord:"<<" "<<aktivSpelare.losenord<<endl;
cout<<"Registrerad sedan:"<<" "<<aktivSpelare.regDatum<<endl;
if(aktivSpelare.konto>0) //En selektion för ifall insatsen är mindre än 0, skriv - före pengarna behövs ej, då det automatiskt skrivs - framför pengarna redan då de dras av från kontot och det finns mindre än 0kr kvar.
{
status="+";
}
else if(aktivSpelare.konto==0)
{
status="+-";
}
cout<<"Konto:"<<" "<<status<<aktivSpelare.konto<<"kr"<<endl<<endl;
string info="För inbetalning av ytterligare insats, utbetalning av vinst eller utträde ur spelet, var god kontakta Lek & Spel's kundtjänst på telefon-nr 0000/111 222.";
cout<<info;
for(int i=0;i<4;i++)
{
cout<<endl;
}
cout<<"b. Bakåt"<<endl<<endl;
cin>>profilVal;
if(profilVal=='b'||profilVal=='B')
{
meny();
}
else if(profilVal!='b'||profilVal!='B')
{
profil();
}
}
void header()
{
system("cls");
cout<<endl;
cout<<setfill('-')<<setw(81)<<" ";
cout<<setfill(' ')<<setw(50)<<"Välkommen till Gissa Tal"<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl<<endl<<endl;
}
void meny()
{
header();
int menyVal=0;
cout<<setfill(' ')<<setw(41)<<"Du är inloggad som "<<aktivSpelare.fornamn<<" "<<aktivSpelare.efternamn<<endl<<endl<<endl;
cout<<"MENY"<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"1. Visa min profil"<<endl;
cout<<"2. Spela"<<endl;
cout<<"3. Topplista"<<endl;
cout<<"4. Logga ut"<<endl<<endl<<endl;
cin>>menyVal;
switch(menyVal)
{
case 1:
profil();
case 2:
kopGissning();
case 3:
topplista();
case 4:
uppdateraFil();
start();
}
}
void topplista()
{
header();
char topplistaVal;
cout<<"Topplista"<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"b. Bakåt"<<endl<<endl;
cin>>topplistaVal;
if(topplistaVal=='b'||topplistaVal=='B')
{
meny();
}
else if(topplistaVal!='b'||topplistaVal!='B')
{
topplista();
}
}
void nySpelare()
{
header();
cout<<antalSpelare;
char dateStr[9],
fnamn[20],
enamn[20];
_strdate(dateStr);
string nickname,
str1,
str2;
cout<<"Ny Spelare"<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"Förnamn: ";
cin>>fnamn;
strcpy(array[antalSpelare].fornamn,fnamn);
cout<<endl;
cout<<"Efternamn: ";
cin>>enamn;
strcpy(array[antalSpelare].efternamn,enamn);
cout<<endl<<endl;
array[antalSpelare].regDatum = dateStr;
array[antalSpelare].konto = 1000;
cout<<"Du har tilldelats följande användarnamn och lösenord:"<<endl<<endl;
//Skapa användarnamn
fnamn[3]='\0'; //De tre första tecknen i förnamnet tas ut
enamn[3]='\0'; //De tre första tecknen i efternamnet tas ut
str1 = fnamn; //Det inmatade förnamnet tilldelas variabeln str1
str2 = enamn; //Det inmatade efternamnet tilldelas variabeln str2
nname = str1+str2; //Här konkateneras de sex tecknena
array[antalSpelare].lognamn = nname;
//Skapa lösenord
char pArray[86]="ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdefghijklmnopqrstuvwxyzåäö0123456789";
char password[86]="";
srand(static_cast<unsigned>(time(0))); //Behövs för att inte samma lösenord skall slumpas fram de andra gångerna
int length=5; //Lösenordets längd i antal tecken
for (int i=0; i<length; i++)
{
int j;
j = 0 + int(67.0 * rand()/(RAND_MAX+1.0));
password[i]= pArray[j];
pwrd = password;
array[antalSpelare].losenord = pwrd;
}
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"Användarnamn: "<<array[antalSpelare].lognamn<<endl;
cout<<"Lösenord: "<<array[antalSpelare].losenord<<endl;
cout<<setfill('-')<<setw(81)<<" "<<endl;
cout<<"Var god anteckna ditt användarnamn och lösenord!"<<endl<<endl<<endl;
antalSpelare++; //Ökar antalet spelare med 1
cout<<antalSpelare;
system("pause");
sparaFil();
start();
}
int main()
{
dos_console();
system("color 3F");
laddaFil();
start();
system("pause");
return 0;
}
Sv:Problem med inläsning från txt-fil
// Kontrollera filstorleken
int beg = ladda.tellg();
ladda.seekg( 0, ios::end );
int end = ladda.tellg();
ladda.seekg( ios::beg ); // Hoppa tillbaks till början av filen
if( end - beg == 0 )
{
ladda.close();
return;
}
/Peter
Sv: Problem med inläsning från txt-fil
Sv: Problem med inläsning från txt-fil
void laddaFil()
{
ifstream ladda("gissaTalSpelare.txt"); //Läser in data från filen
// Kontrollera filstorleken
int beg = ladda.tellg();
ladda.seekg( 0, ios::end );
int end = ladda.tellg();
ladda.seekg( ios::beg ); // Hoppa tillbaks till början av filen
if( end - beg == 0 )
{
ladda.close();
return;
}
while(!ladda.eof()) //Så länge som filen ej är slut, dvs. det finns tecken att läsa in, forsätt loopa.
{
ladda>>array[antalSpelare].lognamn; //Denna rad läses in till array[antalSpelare].lognamn
ladda>>array[antalSpelare].fornamn; //Denna rad läses in till array[antalSpelare].fornamn
ladda>>array[antalSpelare].efternamn; //Denna rad läses in till array[antalSpelare].efternamn
ladda>>array[antalSpelare].losenord; //Denna rad läses in till array[antalSpelare].losenord
ladda>>array[antalSpelare].regDatum; //Denna rad läses in till array[antalSpelare].regDatum
ladda>>array[antalSpelare].konto; //Denna rad läses in till array[antalSpelare].konto
antalSpelare++; //Ökar antalet spelare med 1
}
ladda.close(); //Filen stängs för inläsning
}
Så här ser datan ut i gissaTalSpelare:
JoaAnd
Joakim
Andersson
gszkU
03/13/06
1000
PetHan
Peter
Hansson
gVzpw
03/13/06
1000
//tom rad 1
//tom rad 2
//tom rad 3
//tom rad 4
//tom rad 5
0
EmiJan
Emil
Jansson
gä8w5
03/13/06
1000
Aha, testade att lägga in din kod i början av while-loopen, och nu kraschar progget ja :(
Sv:Problem med inläsning från txt-fil
void laddaFil()
{
ifstream ladda("gissaTalSpelare.txt"); //Läser in data från filen
while(!ladda.eof()) //Så länge som filen ej är slut, dvs. det finns tecken att läsa in, forsätt loopa.
{
ladda>>array[antalSpelare].lognamn; //Denna rad läses in till array[antalSpelare].lognamn
ladda>>array[antalSpelare].fornamn; //Denna rad läses in till array[antalSpelare].fornamn
ladda>>array[antalSpelare].efternamn; //Denna rad läses in till array[antalSpelare].efternamn
ladda>>array[antalSpelare].losenord; //Denna rad läses in till array[antalSpelare].losenord
ladda>>array[antalSpelare].regDatum; //Denna rad läses in till array[antalSpelare].regDatum
ladda>>array[antalSpelare].konto; //Denna rad läses in till array[antalSpelare].konto
if( ladda.eof() )
break;
antalSpelare++; //Ökar antalet spelare med 1
cout<<array[antalSpelare].lognamn<<endl;
cout<<array[antalSpelare].fornamn<<endl;
cout<<array[antalSpelare].efternamn<<endl;
cout<<array[antalSpelare].losenord<<endl;
cout<<array[antalSpelare].regDatum<<endl;
cout<<array[antalSpelare].konto<<endl;
system("pause");
}
ladda.close(); //Filen stängs för inläsning
}
/Peter
Sv: Problem med inläsning från txt-fil