2009-03-17, 01:09
  #1
Medlem
Först öppnas filen artikel_databas.txt sedan kollas om den går att öppna med (!infil.good()). Självklart finns filen redan och den går vidare till nästa del.
Efter första inmatningen av ny artikel och när den har skrivit ut tecknena till filen och sedan stänger den så när man då ska lägga in en ny artikel så loopas hela processen om igen då den ska kolla ifall artikel_databas.txt finns, och det är nu på andra försöket som den går in i felläge och säger att filen inte finns. Självklart finns filen kvar men jag fattar inte varför den hoppar över numera. Den här koden funkade prima ballerina innan .

Kod:
void nya_artiklar()
{
    
int     iArtNr=0iArtikelSlumpNr=1002iHittat=0;            // Deklarationer
    
char     kArtNmn[20] = "";
    
double     dArtPris=0;
    
ifstream infil;
    
ofstream utfil;
    
    do
    {
        
cin.ignore();                                        // Efter valet behöver jag slänga bort värdet
        
system("cls");
        
artreg_rubrik();
        
iHittat=0;

        
srand((unsignedtime(0));                            // Initiera slumptalsgeneratorn
        
iArtikelSlumpNr rand()%9999+1;                    // Slumpa ut ett artikelnummer

        
infil.open("artikel_databas.txt",ios::in);            // Öppnar filen

        
if (!infil.good())                                            // Kollar om filen finns eller går att öppna
        
{
            
system("cls");
            
artreg_rubrik();
            
fel_msg_artikel();                                // Anropar felmeddelandet för artikel_databas.txt

            
rename("artikel_databas.txt""artikel_databas.BAK.txt");
            
utfil.open("artikel_databas.txt",ios::out);
            
utfil.close();

            
tryck_enter();
            
cin.get();
        break;
        }

        while(
infil >> iArtNr >> kArtNmn >> dArtPris)        // Går igenom alla artikelnummer
        
{
            if(
iArtNr == iArtikelSlumpNr)                    // Kollar om den hittar numret i "artikel_databas.txt"
            
{
                
iHittat=1;                                    // Loopen avbryts och börjar om igen för att slumpa fram nytt nr
                
infil.close();                                // Stänger filen.
            
break;
            }
        }
        
        
infil.close();    
        if(
iHittat == 1)                                    // Användaren får mata in övrig data
            
break;
    
        
cout << "\n                Ange artikelinformation nedan (0 = Avsluta)\n\n";
        
cout << "                         Artikelnummer [" << iArtikelSlumpNr << "]\n";
        
cout << "                         ==================== " << endl << endl;

        
cout << "                         Artikelnamn: ";
        
cin.getline(kArtNmn,19);

        if(
kArtNmn[0] == '0')                                // Hoppar över skrivning till fil om man avbryter med 0
            
break;

        
cout << "                         Artikelpris: ";
        
cin >> dArtPris;

        if (
dArtPris == 0)                                    // Hoppar över skrivning till fil om man avbryter med 0
            
break;

        
utfil.open("artikel_databas.txt",ios::out|ios::app);// Öppnar filen
                                                            // Skriver in all inmatad data till filen
        
utfil << iArtikelSlumpNr << endl << kArtNmn << endl << dArtPris << endl;
        
utfil.close();                                        // Stänger filen

    
} while(iHittat || !iHittat);                            // Upprepa hela processen tills användaren avbryter med 0
    
    
system("cls");

__________________
Senast redigerad av Moodilic 2009-03-17 kl. 01:48.
Citera
2009-03-17, 17:39
  #2
Medlem
Möjlig lösning men det ser fult ut att göra så här

Om jag bytar ut...
Kod:
infil.open("artikel_databas.txt",ios::in);
mot...
Kod:
ifstream infil("artikel_databas.txt",ios::in);
så funkar allting som det ska igen.
Varför kan jag inte ha infil.open och sedan infil.close efter while-loopen?
__________________
Senast redigerad av Moodilic 2009-03-17 kl. 17:41.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in