varför skriver den inte ut betyg C

Permalänk
Skrivet av Panatin:

Ska jag använda en for loop då med sizeof? Testar och återkommer tack

Om du vill ha antalet element i en array så får du köra sizeof() på din array men du måste även dividera med storleken på datatypen. Detta eftersom att sizeof() returnerar objektets totala storlek (allokerat minne) och inte "antalet element" som du är ute efter i detta fallet.

sizeof(minarray)/sizeof(minarray[0])

eller genom att använda datatypen

sizeof(minarray)/sizeof(int)

Eftersom att detta är en skoluppgift(?) så förstår jag varför man använder array men annars är vector ett bättre val.

Permalänk
Medlem

[quote postid="19676642" userid="2255" name="the_weird"]
Om du vill ha antalet element i en array så får du köra sizeof() på din array men du måste även dividera med storleken på datatypen. Detta eftersom att sizeof() returnerar objektets totala storlek (allokerat minne) och inte "antalet element" som du är ute efter i detta fallet.

sizeof(minarray)/sizeof(minarray[0])

eller genom att använda datatypen

sizeof(minarray)/sizeof(int)

Ok nej jag vill ha fram betyg bara (char betyg[6])
Alltså hur många A eller B eller C osv

Permalänk
Medlem
Skrivet av the_weird:

Om du vill ha antalet element i en array så får du köra sizeof() på din array men du måste även dividera med storleken på datatypen. Detta eftersom att sizeof() returnerar objektets totala storlek (allokerat minne) och inte "antalet element" som du är ute efter i detta fallet.

sizeof(minarray)/sizeof(minarray[0])

eller genom att använda datatypen

sizeof(minarray)/sizeof(int)

Eftersom att detta är en skoluppgift(?) så förstår jag varför man använder array men annars är vector ett bättre val.

I modern C++ så är det bättre att använda std::size istället för sizeof för att få storleken av en C-array. Det är annars väldigt enkelt att skjuta sig själv i foten med sizeof-tricket eftersom det bara fungerar korrekt i vissa fall och annars ger fel resultat.

Men det bästa är förstås att använda std::array istället så undviker man många av överraskningarna man kan råka ut för med C-arrayer, t.ex. som i det här fallet när arrayen beter sig som en textsträng.

Permalänk
Skrivet av Panatin:

Ok nej jag vill ha fram betyg bara (char betyg[6])
Alltså hur många A eller B eller C osv

Ja då får du loopa igenom din array precis som du var inne på men sizeof() är inte nödvändig då eftersom du har en array med fast storlek.

Finns ju lite olika sätt att lösa det på..

### Med std::string std::cout << std::string(betyg, 6) << std::endl; ### Med Loop for(int i=0;i<6;++i) { std::cout << betyg[i]; } ### Med range-based loop for(const auto& b: betyg) { std::cout << b; } ### Med printf std::printf("%s", betyg)

Skrivet av perost:

I modern C++ så är det bättre att använda std::size istället för sizeof för att få storleken av en C-array. Det är annars väldigt enkelt att skjuta sig själv i foten med sizeof-tricket eftersom det bara fungerar korrekt i vissa fall och annars ger fel resultat.

Men det bästa är förstås att använda std::array istället så undviker man många av överraskningarna man kan råka ut för med C-arrayer, t.ex. som i det här fallet när arrayen beter sig som en textsträng.

Håller helt och hållet med om det och borde ha följt upp med det. Överlag ska man alltid utnyttja de "nya" template funktionerna i std framför de äldre "c-style" varianterna.
Jag antog att detta är en skoluppgift och det brukar vara begränsat i vad eleverna får utnyttja. Eftersom det föreslagna sizeof "tricket" funkar i detta fallet så föreslog jag det.

Permalänk
Medlem
Skrivet av the_weird:

Ja då får du loopa igenom din array precis som du var inne på men sizeof() är inte nödvändig då eftersom du har en array med fast storlek.

Finns ju lite olika sätt att lösa det på..

### Med std::string std::cout << std::string(betyg, 6) << std::endl; ### Med Loop for(int i=0;i<6;++i) { std::cout << betyg[i]; } ### Med range-based loop for(const auto& b: betyg) { std::cout << b; } ### Med printf std::printf("%s", betyg)

Håller med helt och hållet och borde ha följt upp med det. Överlag ska man alltid utnyttja de "nya" template funktionerna i std framför de äldre "c-style" varianterna.
Jag antog att detta är en skoluppgift och det brukar vara begränsat i vad eleverna får utnyttja. Eftersom det föreslagna sizeof "tricket" funkar i detta fallet så föreslog jag det.

ah juste det va så det va i c++..
Om man verkligen har behov av såna funktioner är väl dessutom en "vector" bättre?
(kodar c# till vardags, och har kodat C, men aldrig c++)

Visa signatur

CPU: Ryzen 9 3900x Noctua NH-D14 MOBO: TUF Gaming X570-PLUS GPU: GTX 980 RAM: 32 GB 3200 MHz Chassi: R4 PSU: Corsair AX860 Hörlurar: SteelSeries 840 Mus: Logitech G502 Lightspeed V.v. nämn eller citera mig för att få svar.

Permalänk
Medlem
Skrivet av Haptic:

"betyg"-variabeln är en array, du måste göra en loop för att printa varje plats i den, eller om du bara vill printa antalet kan du göra sizeof(betyg)

La betyget i en for loop gick hur bra som helst tack

Permalänk
Skrivet av Haptic:

ah juste det va så det va i c++..
Om man verkligen har behov av såna funktioner är väl dessutom en "vector" bättre?
(kodar c# till vardags, och har kodat C, men aldrig c++)

std::vector om du har mycket data och okänd mängd (skapas på "heap").
std::array om du har lite data och en känd mängd (skapas på "stack").

Array har mindre overhead än vector och oftast snabbare.

Är du osäker så är troligen vector det bästa valet.

Sen finns det ju många potthål att fastna i med vector också (copy/move semantics, pointers o.s.v) men det är en annan diskussion och vi har redan glidit ifrån ämnet

Permalänk
Moderator
Brons i quiz

@Panatin: Jag har sammanfogat dina trådar, fortsätt på samma tråd så det är lättare att hänga med istället för att skapa en helt ny.

/Vzano, Moderator

Visa signatur

Citera om du vill ha svar!
Tycker du om sidospår? :D Besök The Wiki Game
Har du fråga angående modereringen? PM till Moderatorerna eller Kontaktformulär