Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Problem med inläsning från txt-fil

Postades av 2006-03-13 17:10:11 - Ramon Radnoci, i forum c++, Tråden har 14 Kommentarer och lästs av 978 personer

Har ett störande problem som måste lösas snarast... Jag klistrar med kodsnutten där det blir fel.

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!


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 17:15:32 - Tobias Ahlström

Är det du visar utskriften i programmet eller hur txt filen ser ut?


Svara

Sv:Problem med inläsning från txt-fil

Postades av 2006-03-13 17:18:17 - Ramon Radnoci

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å?


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 17:26:04 - Tobias Ahlström

Du får gärna visa hur du sparar till textfilen.


Svara

Sv:Problem med inläsning från txt-fil

Postades av 2006-03-13 17:30:39 - Ramon Radnoci

sparaFil-funktionen:

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.


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 18:11:02 - Peter Larsson

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.

/Peter


Svara

Sv:Problem med inläsning från txt-fil

Postades av 2006-03-13 18:15:09 - Ramon Radnoci

Okej, tackar för tipsen. Skall kolla det nu, så återkommer jag sen.


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 18:27:18 - Ramon Radnoci

Innan jag startar start() (denna funktion skriver ut en välkomsttext och meny) så anropas laddaFil();
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?


Svara

Sv:Problem med inläsning från txt-fil

Postades av 2006-03-13 20:55:29 - Peter Larsson

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.

/Peter


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 21:06:35 - Ramon Radnoci

Här kommer hela källkoden:

#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;
}


Svara

Sv:Problem med inläsning från txt-fil

Postades av 2006-03-13 22:20:07 - Peter Larsson

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.

// 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


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 22:36:05 - Ramon Radnoci

Okej, tackar så mycket! :D Ska testa detta genast! Återkommer sen.


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 23:03:42 - Ramon Radnoci

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.

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 :(


Svara

Sv:Problem med inläsning från txt-fil

Postades av 2006-03-13 23:37:55 - Peter Larsson

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.

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


Svara

Sv: Problem med inläsning från txt-fil

Postades av 2006-03-13 23:47:08 - Ramon Radnoci

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.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 617
27 953
271 709
5 748
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies