Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003

Problem med filhantering

Jag håller på att skriva ett program som man ska använda till inventeringar.
Till det behöver jag skriva textfiler med exakt rätt formatering.

Problemet jag har är att det skriver ut skräptext ibland, obs ibland.
Det är verkligen skumt då det hakar upp sig på exakt ett ställe.

Ska ta ett exempel från koden.

ofstream output;

output.open(File, ios::app);

output<<"TRTK "<<indata[i].gang[i]<<" "<<indata[i].gang[i]<<indata[i].gang[i]<<" "<<truelength;

cout<<"TRTK "<<indata[i].gang[i]<<" "<<indata[i].gang[i]<<indata[i].gang[i]<<" "<<truelength;

När jag skriver sådär skriver den ut skräptecken ibland. Men om jag kör en vanlig cout precis brevid som debug så är den helt rätt. Det är helt klart frustrerande.

Filen får inga felflaggor eller något när jag testat och den går att öppna korrekt

Använder mig av dev-C++ om det är till nån hjälp.

edit:
Provade att kompilera en i Visual C också, fick samma fenomen där.

Grejen är att jag skriver till filen i en loop, en rad med använarnamn, datum, tid, identifikationsnummer osv...
när jag är klar med den snurran tar koden här över och skriver den längst ner i filen som den ska.
Jag har tagit output.close() osv så den är stängd, och jag har även provat att öppna en först och stänga en när allt är klart. men ingen skillnad.

Om ni inte kan svaret just på min fråga så kanske nån har nån aning om det här.
Vad kan göra en ren textfil att bli full av skräptecken? det är alltså ingen binary-data utan ren och skär text.

K#

Trädvy Permalänk
Medlem
Registrerad
Jun 2006

Den största sannolikheten att du får skräptecken är att du skriver ut data som inte är definerad, den får det värdet som det råkar finnas där. Sedan översätts denna data till tecken.

Ett tips är att alltid ge ett värde till datan efter declareringen. Det finns många teorier vad default värdet skall vara men testa ett värde och se om det skrivs ut istället för de konstiga tecknena.

Stega igenom loopen och håll koll på vad som skrivsut och vilket värde det borde ha.

citera!

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jan 2007

Posta mer kod.

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003
Citat:

Ursprungligen inskrivet av Dosshell
Den största sannolikheten att du får skräptecken är att du skriver ut data som inte är definerad, den får det värdet som det råkar finnas där. Sedan översätts denna data till tecken.

Ett tips är att alltid ge ett värde till datan efter declareringen. Det finns många teorier vad default värdet skall vara men testa ett värde och se om det skrivs ut istället för de konstiga tecknena.

Stega igenom loopen och håll koll på vad som skrivsut och vilket värde det borde ha.

Okej..
Det jag har i koden är att jag skriver ut characters och integers om vartannat.
Jag har inte konverterat mina heltal till vanliga tecken innan jag skickar ut dem i filen.
Så, kan det göra skillnad om jag håller mig helt åt chars mot textfilen?

K#

Trädvy Permalänk
Medlem
Registrerad
Jul 2007

Kan du programmera så borde det väl inte vara svårt att felsöka och hitta felet? Testa tills du gör rätt - och sen om det är ngt kommando/funktion/operatör etc som du inte förstår.. fråga då.
Menade inte att vara taskig på något sätt men lite så jag försöker se på saken.

Lycka till!

Trädvy Permalänk
Hedersmedlem
Plats
Linköping
Registrerad
Apr 2004

Varifrån fick du indata? Du borde väl kunna para ihop det som skrivs precis innan skäptecknen med indata och lista ut vad som händer?