Permalänk
Medlem

Vart tror ni felet ligger?

Permalänk
Hedersmedlem
Skrivet av Z3R0:

Vart tror ni felet ligger?

Var var det då "Unknown" kom in i bilden?

Permalänk
Medlem

när jag försöker göra utskriv av arrayens innehåll så har jag en funktion som skriver ut allt

cout<<"Namn: "<<this->name<<"\t Protein: "<<this->protein<<"\t Kolhydrater: "<<this->carb<<"\t Fett: "<<this->lipid<<"\t Kcal: "<<this->kcal<<endl;

och då blir Namn: Unknown för alla livsmedel

Permalänk
Hedersmedlem
Skrivet av Z3R0:

när jag försöker göra utskriv av arrayens innehåll så har jag en funktion som skriver ut allt

cout<<"Namn: "<<this->name<<"\t Protein: "<<this->protein<<"\t Kolhydrater: "<<this->carb<<"\t Fett: "<<this->lipid<<"\t Kcal: "<<this->kcal<<endl;

och då blir Namn: Unknown för alla livsmedel

Men någonstans måste du ju ha tilldelat name värdet "Unknown". Var det i en annan konstruktor än den du visade ovan, och varför används i så fall den (istället för den ovan)?

Permalänk
Medlem

name tilldelas unknown av defaultkonstruktorn, men det gör de andra sakerna också så som protein=0, fett=0 etc etc
min fråga är varför skickas allt förutom namnet till arrayen, i fall namnet hade skickats så hade det inte ståt unknown.

Permalänk
Hedersmedlem
Skrivet av Z3R0:

name tilldelas unknown av defaultkonstruktorn, men det gör de andra sakerna också så som protein=0, fett=0 etc etc
min fråga är varför skickas allt förutom namnet till arrayen, i fall namnet hade skickats så hade det inte ståt unknown.

Varför använder du den konstruktorn överhuvud taget?

Permalänk
Medlem

För att föreläsaren har sagt att för att skapa en array så behöver vi ha en deafaultkonstruktor...
Men jag har alltid gjort så och det har funkat, det funkar typ nu med eftersom alla andra värden ändras, det är bara namnet som inte ändras och ända felet jag kommer på är att det kanske är nåt fel vid inläsningen så att när namnet läses in så skickas inget...

Jag kan ju ta o testa i funktionen som läser från fill att skicka med något med name, tex string name=ERROR och om det skrivs ut när jag skriver ut arrayens innehåll då måste det vara nåt fel på inläsningen av livsmedelsnamnen.

Om du förstår.

Permalänk
Hedersmedlem
Skrivet av Z3R0:

För att föreläsaren har sagt att för att skapa en array så behöver vi ha en deafaultkonstruktor...

Det behövs dock inte om man, som ovan, skapar elementen dynamiskt med new (då kan man skicka med vilka argument man vill). Har du ett fält av Livsmedel-pekare eller ett fält av Livsmedel-objekt?[/QUOTE]

Skrivet av Z3R0:

Men jag har alltid gjort så och det har funkat, det funkar typ nu med eftersom alla andra värden ändras, det är bara namnet som inte ändras och ända felet jag kommer på är att det kanske är nåt fel vid inläsningen så att när namnet läses in så skickas inget...

Även om inläsningen skulle gå fel borde väl namnet sättat till något annat än unknown? Testa att sätta en brytpunkt där tilldelningen sker så kan du se vad som händer.

Permalänk
Medlem

Jag tror det är Livsmedel-pekare eftersom det ser ut såhär Livsmedel ** lm

Ja du har nog rätt. Vart menar du att jag ska sätta "brtypunkten"? o vad är en brytpunkt?

funktionen

void LMReg::readFromFile() { ifstream ifs("livsmedel.txt"); int lines; string input; stringstream ss; getline(ifs, input); cout<<input<<endl; ss<<input; ss>>lines; istringstream buffer(lines); int kcal; double protein; double fett; double kolhydrat; string namn="ERROR"; this->nrOfLM=lines; for(int i=0; i<this->nrOfLM && ifs.good(); i++) { getline(ifs,input); if(!input.size()) continue; ss.clear(); namn = input.substr(0, input.find('\t')); input = input.substr(namn.size() +1, input.size()-1-namn.size()); replace(input.begin(), input.end(), ',', '.'); ss<<input; ss>>kcal>>protein>>fett>>kolhydrat; this->lm[i]=new Livsmedel(name, kcal,protein , kolhydrat, fett); } }

Permalänk
Hedersmedlem
Skrivet av Z3R0:

namn = input.substr(0, input.find('\t'));

input = input.substr(namn.size() +1, input.size()-1-namn.size());
replace(input.begin(), input.end(), ',', '.');
ss<<input;

ss>>kcal>>protein>>fett>>kolhydrat;
this->lm[i]=new Livsmedel(name, kcal,protein , kolhydrat, fett);

Kan det vara så att felet är sammanblandning av name och namn?

Skrivet av Z3R0:

Vart menar du att jag ska sätta "brtypunkten"? o vad är en brytpunkt?

Det var sådana jag talade om här: #10845721

Permalänk
Medlem

fyfan asåå...att jag inte såg det...
tack som fan, det funkar nu, den läser in namnen...

Ett litet problem bara, när jag gör en utskrift av arrayen så presenteras bara 1/12 av textfilen..hmmm

vad tror ni det beror på att bara den sista delen av textdokumentet läses in?

Permalänk
Medlem

hm, vad betyder detta (continue)?

if(!input.size()) continue;

Har aldrig sett det förut...
Aja, får väll googla påt.

Permalänk
Hedersmedlem
Skrivet av Z3R0:

vad tror ni det beror på att bara den sista delen av textdokumentet läses in?

Vad händer om du testar med en annan textfil? Till exempel en med många kopior av de rader som fungerar?

Skrivet av Dalton Sleeper:

hm, vad betyder detta (continue)?

Det får loopen att hoppa över resten av instruktionerna och istället hoppa direkt till nästa varv. Här hoppar den främst över tomma rader.

Permalänk
Medlem

först tänkte jag att den kanske är nåt fel i det att den får problem när den stöter på till ex %, ' eller dylikt..
Men det ser inte ut o va det eftersom den skriver ut lite % o så.

Men iaf, jag försökte med det du sa, och kopierade de 300 fungerande raderna till ungefär 1200 rader och när jag försöker pskriva ut det på skrämen så krashar cmdn.

Permalänk
Hedersmedlem
Skrivet av Z3R0:

Men iaf, jag försökte med det du sa, och kopierade de 300 fungerande raderna till ungefär 1200 rader och när jag försöker pskriva ut det på skrämen så krashar cmdn.

När kraschar det? Direkt, eller hinner den skriva ut något? Med lite tur borde man även i visual studio se var programmet kraschade (om du bara ser kod som inte är din är det lämpligt att under fliken "Call Stack" (typiskt i programmets nedkant) klicka sig nedåt i listan till man känner igen sig).

Permalänk
Medlem

Kraschen jag hade va på skolans dator och samma projekt kraschar inte på min hemdator... Så jag drar slutsatsen att det e fel på skolans dator...

Men men iaf så skrivs fortfarande inte alla livsmedel ut, även i fall ja kopierar de som skrivs ut... Jag gjorde nämligen så att jag la till en "cunter" i utskrivningsfunktionen så att när det första livsmedlet presenteras så visas 1 sen 2 osv osv...
och eftersom utskriften tar ett tag så kan jag se att countern börjar visa 1,2....och sist 1000 men när jag sen skrollar upp för att se nr1, så finns den inte utan 914 är den första... och hur lång än listan med livsmedel är så visas bara de 86 sista när jag gör en utskrift av arrayens innehåll.

Permalänk
Medlem

consolebuffern räcker väll inte hur långt som helst, ett visst antal rader eller tecken brukar vara standard och över det syns bara det sista.
samt att om det krashar på skolans dator så betyder det inte att det är fel på den, kan ha med minne och oinitierade pekare som gör att det krashar och att det sker "lättare" på vissa datorer/os... om du lär dig debugga med breakpoints kommer du att lyckas undvika många fel som ev inte visar sig direkt vid körning.

Permalänk
Medlem

finns det något jag kan göra åt det med consolebuffern?
om ej så är min tanke att man kanske ska kunna typ mata in a/A så skrivs allt som börjar på a ut?