varför skriver den inte ut betyg C

Permalänk
Medlem

varför skriver den inte ut betyg C

Programmet skriver ut A och B men inte C när poängen hamnar mellan C gränsen är det fel i in tilldelning ??

void GorOmPoangTillBetyg() { string amnen[5] = {"Matematik","Svenska","Engelska","Historia","Fysik"}; int poang[5]; int InskrivnaPoang; char betyg[6]; for (int i = 0; i < 5; i++) { if (poang[i] == 100) { betyg[i] = 'A'; cout << amnen[i] << " " << betyg[i] << endl; } else if (poang[i] < 100 || poang[i] > 90) { betyg[i] = 'B'; cout << amnen[i] << " " << betyg[i] << endl; } else if (poang[i] < 90 || poang[i] > 80) { betyg[i] = 'C'; cout << amnen[i] << " " << betyg[i] << endl; } } }

[code]-taggar tillagda
Permalänk
Medlem

Du ska nog ha && istället för||

Permalänk
Medlem

Som pacc skriver ska du använda &&. Det blir nämligen alltid sant i den första else if.

Visa signatur

Ryzen 7800X3D, be quiet! pure rock 2, RTX 4070 Ti Super, Corsair 32GB 6000MHz CL36, Corsair TX850M

Permalänk
Medlem

Det sker ett short-circuit evaluation i uttrycket "else if (poang[i] < 100 || poang[i] > 90)", eftersom "poang[i] < 100" blir sant så branchar programmet in i denna sats. Därför behövs ytterligare ett villkor med &&.

Visa signatur

| Ryzen 3800XT | Corsair LPX 32GB | B550 Aorus Elite v2 | GTX 970 | Samsung 970 Evo | CM Masterbox 520 | RM750x | Windows 7

| Ryzen 2700 | Corsair LPX 16GB | Prime B450-Plus | GT 1030 | Samsung 970 Evo | Kolink Observatory | RM750x | EndeavourOS

| JDS Labs Atom | Khadas Tone Board | Fostex TX-X00 & HIFIMAN HE4XX |

Permalänk
Medlem

När du fixat det pacc nämnde ovan, ta och fundera på vad som händer om poängen är exakt 90.

Visa signatur

Laptop: Dell Latitude E7270 | 12,5" FHD IPS | i5-6300U | 16GB RAM | 500GB SSD
Laptop: MacBook Air 13"
NUC: Intel i5-4250U | 8GB RAM | 250GB SSD

Permalänk
Datavetare

Och när du har lurat ut vad det är @PeCe ger en vink kring, fundera om du kan vara "latare" i din kod

if (poang[i] == 100) { ... } // Behöver du verkligen kolla två saker nedan // givet vad som redan är känt för poang[i]? else if (poang[i] < 100 || poang[i] > 90) { ... } // Behöver du verkligen kolla två saker nedan // givet vad som redan är känt för poang[i]? else if (poang[i] < 90 || poang[i] > 80) { ... }

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av pacc:

Du ska nog ha && istället för||

Då blir det bara första ämnet som skrivs ut och inte dom andra 4

Permalänk
Medlem
Skrivet av Yoshman:

Och när du har lurat ut vad det är @PeCe ger en vink kring, fundera om du kan vara "latare" i din kod

if (poang[i] == 100) { ... } // Behöver du verkligen kolla två saker nedan // givet vad som redan är känt för poang[i]? else if (poang[i] < 100 || poang[i] > 90) { ... } // Behöver du verkligen kolla två saker nedan // givet vad som redan är känt för poang[i]? else if (poang[i] < 90 || poang[i] > 80) { ... }

Tänker du att jag ska lämna allt i första if satsen eller vad tänkte du?

Permalänk
Hedersmedlem

Nej, inte i första if-satsen.

Men fördelen med if / else if är att du redan rent logiskt vet att när du kommer till "else if" så är redan alla grejerna före falska.

Till exempel (i pseudokod):

if (bilen är röd) { /* här vet vi att bilen är röd */ } else if (bilen är snabb) { /* här vet vi att bilen är snabb... men vi vet ÄVEN att bilen INTE är röd, för då hade vi aldrig kommit hit */ } else { /* här vet vi att bilen varken är snabb eller röd */ }

Kör du alltså med if-else-if, etc så behöver du aldrig någonsin kolla mer än ett gränsvärde per if-sats i ditt fall.

Permalänk
Medlem
Skrivet av pv2b:

Nej, inte i första if-satsen.

Men fördelen med if / else if är att du redan rent logiskt vet att när du kommer till "else if" så är redan alla grejerna före falska.

Till exempel (i pseudokod):

if (bilen är röd) { /* här vet vi att bilen är röd */ } else if (bilen är snabb) { /* här vet vi att bilen är snabb... men vi vet ÄVEN att bilen INTE är röd, för då hade vi aldrig kommit hit */ } else { /* här vet vi att bilen varken är snabb eller röd */ }

Kör du alltså med if-else-if, etc så behöver du aldrig någonsin kolla mer än ett gränsvärde per if-sats i ditt fall.

Ok räcker med mindre än menar du

Permalänk
Medlem
Skrivet av pv2b:

Nej, inte i första if-satsen.

Men fördelen med if / else if är att du redan rent logiskt vet att när du kommer till "else if" så är redan alla grejerna före falska.

Till exempel (i pseudokod):

if (bilen är röd) { /* här vet vi att bilen är röd */ } else if (bilen är snabb) { /* här vet vi att bilen är snabb... men vi vet ÄVEN att bilen INTE är röd, för då hade vi aldrig kommit hit */ } else { /* här vet vi att bilen varken är snabb eller röd */ }

Kör du alltså med if-else-if, etc så behöver du aldrig någonsin kolla mer än ett gränsvärde per if-sats i ditt fall.

Nja, eftersom första if-kollen är om poang == 100, så kan vi inte dra några andra slutsatser än poang != 100 inför den andra.
Ponera att poängen är 123...

I princip har du rätt...men det krävs en inledande koll som täcker poang > 100.

Visa signatur

Laptop: Dell Latitude E7270 | 12,5" FHD IPS | i5-6300U | 16GB RAM | 500GB SSD
Laptop: MacBook Air 13"
NUC: Intel i5-4250U | 8GB RAM | 250GB SSD

Permalänk
Avstängd

Sedan hade jag skrivit de lägre siffrorna först och högre efteråt, så det ligger lite mer logiskt och snyggare (men ändrar egentligen inget i if-satsen).
Men det gör det enklare att läsa "om poäng är mellan 90 och 100" och inte "om poäng är mindre än 100 och mer än 90".

Permalänk
Medlem
Skrivet av Yoshman:

Och när du har lurat ut vad det är @PeCe ger en vink kring, fundera om du kan vara "latare" i din kod

if (poang[i] == 100) { ... } // Behöver du verkligen kolla två saker nedan // givet vad som redan är känt för poang[i]? else if (poang[i] < 100 || poang[i] > 90) { ... } // Behöver du verkligen kolla två saker nedan // givet vad som redan är känt för poang[i]? else if (poang[i] < 90 || poang[i] > 80) { ... }

Krävs att du vänder på den precis som @stgr säger nedan. I den ordningen som det står skrivet nu kommer två saker behöva kollas, rätta mig om jag har fel.

Skrivet av stgr:

Sedan hade jag skrivit de lägre siffrorna först och högre efteråt, så det ligger lite mer logiskt och snyggare (men ändrar egentligen inget i if-satsen).
Men det gör det enklare att läsa "om poäng är mellan 90 och 100" och inte "om poäng är mindre än 100 och mer än 90".

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Hedersmedlem
Skrivet av PeCe:

Nja, eftersom första if-kollen är om poang == 100, så kan vi inte dra några andra slutsatser än poang != 100 inför den andra.
Ponera att poängen är 123...

I princip har du rätt...men det krävs en inledande koll som täcker poang > 100.

Absolut, men den slutsatsen hade jag tänkt att TS skulle kunna komma till själv efter nästa iteration.

Egentligen borde det vara ett felmeddelande om poäng > 100

Permalänk
Hedersmedlem
Skrivet av stgr:

Sedan hade jag skrivit de lägre siffrorna först och högre efteråt, så det ligger lite mer logiskt och snyggare (men ändrar egentligen inget i if-satsen).
Men det gör det enklare att läsa "om poäng är mellan 90 och 100" och inte "om poäng är mindre än 100 och mer än 90".

Det är varken mer logiskt åt ena eller andra hållet, i ena fallet kollar du i ordningen A B C, i andra fallet kollar du i poängordning från lägre till högre.

Båda sätten kräver exakt lika många ifsatser i själva koden.

Permalänk
Medlem
Skrivet av PeCe:

Nja, eftersom första if-kollen är om poang == 100, så kan vi inte dra några andra slutsatser än poang != 100 inför den andra.
Ponera att poängen är 123...

I princip har du rätt...men det krävs en inledande koll som täcker poang > 100.

Ok ja det e ju sant testar tack

Permalänk
Avstängd
Skrivet av pv2b:

Det är varken mer logiskt åt ena eller andra hållet, i ena fallet kollar du i ordningen A B C, i andra fallet kollar du i poängordning från lägre till högre.

Båda sätten kräver exakt lika många ifsatser i själva koden.

Det sa jag inte..det jag sa står i det jag skrev.
Det blir mer lättläst

Permalänk
Medlem

Löste det med >= 100 och en continue; i varje if loop vet inte om det är snyggt eller rätt, men koden läser och klarar av både 100 lägre än 100 och högre än hundra med rätt utskrift med Betyg

tack för all hjälp uppskattar era ideer dom får en på rätt bana

#include <iostream>

using namespace std;

void LasPoang()
{
string amnen[5] = {"Matematik","Svenska","Engelska","Historia","Fysik"};
int poang[5];
int InskrivnaPoang;

for (int i = 0; i < 5; i++)
{
cout << "Ange betyg i " << amnen[i] << endl;
cin >> InskrivnaPoang;
poang[i] = InskrivnaPoang;

}
}
void GorOmPoangTillBetyg()
{
string amnen[5] = {"Matematik","Svenska","Engelska","Historia","Fysik"};
int poang[5];
int InskrivnaPoang;
char betyg[6];

for (int i = 0; i < 5; i++)
{

if (poang[i] >= 100 )
{
betyg[i] = 'A';

cout << amnen[i] << " " << betyg[i] << endl;

continue;
}
if (poang[i] <= 99 && poang[i] >= 90)
{
betyg[i] = 'B';

cout << amnen[i] << " " << betyg[i] << endl;

continue;
}
if (poang[i] <= 89 && poang[i] >= 80)
{
betyg[i] = 'C';

cout << amnen[i] << " " << betyg[i] << endl;

continue;
}
if (poang[i] <= 79 && poang[i] >= 70)
{
betyg[i] = 'D';

cout << amnen[i] << " " << betyg[i] << endl;

continue;

}
if (poang[i] <= 69 && poang[i] >= 51)
{
betyg[i] = 'E';

cout << amnen[i] << " " << betyg[i] << endl;

continue;
}
if (poang[i] <= 50 && poang[i] >= 0);
{
betyg[i] = 'F';

cout << amnen[i] << " " << betyg[i] << "Underkänd" << endl;

continue;
}
}
}

int main()
{

LasPoang();

GorOmPoangTillBetyg();

return 0;
}

Permalänk
Avstängd

Nu kan inte jag C, men jag hade skrivit så här i vilket språk som helst.

if x<10 then y=1; else if x<20 then y=2; else if x<30 then y=3; else if x>=30 then y=4;

Edit: Om man har stora databaser, så bör man alltid köra "else if", eller vad det heter i ditt språk, för att minska tiden det tar för koden att köra. Kör man många "IF"-satser, så behöver programmet söka igenom alla rader för varje enskild IF-sats, vilket inte är optimalt. Det gör ingen skillnad när man har små datamängder, men det gör en enorm skillnad när man har stora datamängder. Pratar av egen erfarenhet.

Permalänk
Medlem

Tror han menade att du inte behöver kolla <= XX i varje if statement. Det räcker med att kolla >= XX.

Visa signatur

Ryzen 7800X3D, be quiet! pure rock 2, RTX 4070 Ti Super, Corsair 32GB 6000MHz CL36, Corsair TX850M

Permalänk
Medlem
Skrivet av Kladdpapper:

Tror han menade att du inte behöver kolla <= XX i varje if statement. Det räcker med att kolla >= XX.

ok tack !

Permalänk
Hedersmedlem

Hej! Bra jobbat, du verkar ju ha något som fungerar, men trots att din kod fungerar så gör den bara det av en slump. Du har en rätt allvarlig bugg som gömmer sig.

I funktionen GorOmPoangTillBetyg() så läser du aldrig in värden i arrayen poang. När du sedan läser variabler därifrån så hittar den bara vad som råkade vara på den minnesplatsen förut. Av en slump så kan det i vissa implementationer av C++ råka bli så att det blir rätt ändå, eftersom arrayen läggs på samma minnesadress som motsvarande array i LasPoang(). Detta för att du har samma uppsättningar variabler i båda funktionerna, inte returnerar något, utan bara kör funktionerna utan parametrar direkt efter varandra.

Att förklara exakt hur detta funkar ändå innebär att gå in på hur "stacken" fungerar och det tror jag är lite överkurs för dig just nu, det räcker nog för att du ska förstå att det inte funkar. Testa t.ex. att kasta om ordningen i vilken du deklararer dina variabler så bör du nog se att det går sönder.

Utöver detta så formaterade jag upp koden nedan och har lagt till en del stilistiska kommentarer på mindre grejer som du kunde gjort "bättre" även om din approach funkar.

#include <iostream> using namespace std; void LasPoang() { // Den här listen repeteras om och om igen i din kod. Generellt är det bra // att inte upprepa sig i kod, för om man ändrar på ett ställe är det lätt // hänt att man glömmer ändra på ett annat. string amnen[5] = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik" }; // Du bör även ha en konstant istället för att hårdkoda en 5:a överallt för // "antal ämnen", av samma anledning, det är lätt att det blir fel om man ska // ändra på många ställen. int poang[5]; int InskrivnaPoang; // Varför är detta plötsligt stort I i början? // Variabelnamn i C++ inleds normalt med liten bokstav. for (int i = 0; i < 5; i++) { cout << "Ange betyg i " << amnen[i] << endl; // Du skulle kunna skriva in poängen direkt in i poang[i] genom att skriva: // cin >> poang[i]; cin >> InskrivnaPoang; poang[i] = InskrivnaPoang; } } void GorOmPoangTillBetyg() { string amnen[5] = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik" }; int poang[5]; // Oj! Den här arrayen initieras aldrig! Var kommer värdena in // i den här funktionen? Att detta ens funkar beror på slumpen. int InskrivnaPoang; // Den här variabeln används inte ens i den här // funktionen? char betyg[6]; // Oj! Varför är denna 6 lång? Detta är exakt vad jag menade // när jag sade att det är bra att ha konstanter. :-) for (int i = 0; i < 5; i++) { if (poang[i] >= 100) { betyg[i] = 'A'; cout << amnen[i] << " " << betyg[i] << endl; // Alla dessa continue-satser... varför inte bara köra if/else if // istället? Det blir betydligt renare, t.ex. om du vill lägga in // kod i slutet av blocket. continue; } if (poang[i] <= 99 && poang[i] >= 90) { // Du behöver inte kolla poang[i] är högst 99 här, du vet redan att // poang[i] inte är 100 eller högre, för hade poang[i] varit så högt // så hade du ju hamnat i if-stasen ovan och gått igenom loopen med // continue. betyg[i] = 'B'; // Kod i slutet, som till exempel denna rad, denna är ju identisk i // alla lägen förutom för betyg F. cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 89 && poang[i] >= 80) { betyg[i] = 'C'; cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 79 && poang[i] >= 70) { betyg[i] = 'D'; cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 69 && poang[i] >= 51) { betyg[i] = 'E'; cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 50 && poang[i] >= 0); { betyg[i] = 'F'; cout << amnen[i] << " " << betyg[i] << "Underkänd" << endl; continue; } // Här nere skulle du kunna skriva ut ämnet, betyget, och huruvida det är // underkänt, istället för att upprepa den koden om och om igen i varje // if-sats. Men det bygger ju på att du kör if/else if istället för att ha // en continue. } } int main() { LasPoang(); GorOmPoangTillBetyg(); return 0; }

Till sist rekommenderar jag att du alltid kompilerar din källkod med varningar aktiverade. Sannolikt kom det varningar när din kod kompilerade som klagar just på att du försöker lära en array som aldrig någonsin skrivs, men antingen var varningar inte aktiverade i din kompilator, eller så struntade du helt enkelt i dem.

Permalänk
Medlem
Skrivet av pv2b:

Hej! Bra jobbat, du verkar ju ha något som fungerar, men trots att din kod fungerar så gör den bara det av en slump. Du har en rätt allvarlig bugg som gömmer sig.

I funktionen GorOmPoangTillBetyg() så läser du aldrig in värden i arrayen poang. När du sedan läser variabler därifrån så hittar den bara vad som råkade vara på den minnesplatsen förut. Av en slump så kan det i vissa implementationer av C++ råka bli så att det blir rätt ändå, eftersom arrayen läggs på samma minnesadress som motsvarande array i LasPoang(). Detta för att du har samma uppsättningar variabler i båda funktionerna, inte returnerar något, utan bara kör funktionerna utan parametrar direkt efter varandra.

Att förklara exakt hur detta funkar ändå innebär att gå in på hur "stacken" fungerar och det tror jag är lite överkurs för dig just nu, det räcker nog för att du ska förstå att det inte funkar. Testa t.ex. att kasta om ordningen i vilken du deklararer dina variabler så bör du nog se att det går sönder.

Utöver detta så formaterade jag upp koden nedan och har lagt till en del stilistiska kommentarer på mindre grejer som du kunde gjort "bättre" även om din approach funkar.

#include <iostream> using namespace std; void LasPoang() { // Den här listen repeteras om och om igen i din kod. Generellt är det bra // att inte upprepa sig i kod, för om man ändrar på ett ställe är det lätt // hänt att man glömmer ändra på ett annat. string amnen[5] = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik" }; // Du bör även ha en konstant istället för att hårdkoda en 5:a överallt för // "antal ämnen", av samma anledning, det är lätt att det blir fel om man ska // ändra på många ställen. int poang[5]; int InskrivnaPoang; // Varför är detta plötsligt stort I i början? // Variabelnamn i C++ inleds normalt med liten bokstav. for (int i = 0; i < 5; i++) { cout << "Ange betyg i " << amnen[i] << endl; // Du skulle kunna skriva in poängen direkt in i poang[i] genom att skriva: // cin >> poang[i]; cin >> InskrivnaPoang; poang[i] = InskrivnaPoang; } } void GorOmPoangTillBetyg() { string amnen[5] = { "Matematik", "Svenska", "Engelska", "Historia", "Fysik" }; int poang[5]; // Oj! Den här arrayen initieras aldrig! Var kommer värdena in // i den här funktionen? Att detta ens funkar beror på slumpen. int InskrivnaPoang; // Den här variabeln används inte ens i den här // funktionen? char betyg[6]; // Oj! Varför är denna 6 lång? Detta är exakt vad jag menade // när jag sade att det är bra att ha konstanter. :-) for (int i = 0; i < 5; i++) { if (poang[i] >= 100) { betyg[i] = 'A'; cout << amnen[i] << " " << betyg[i] << endl; // Alla dessa continue-satser... varför inte bara köra if/else if // istället? Det blir betydligt renare, t.ex. om du vill lägga in // kod i slutet av blocket. continue; } if (poang[i] <= 99 && poang[i] >= 90) { // Du behöver inte kolla poang[i] är högst 99 här, du vet redan att // poang[i] inte är 100 eller högre, för hade poang[i] varit så högt // så hade du ju hamnat i if-stasen ovan och gått igenom loopen med // continue. betyg[i] = 'B'; // Kod i slutet, som till exempel denna rad, denna är ju identisk i // alla lägen förutom för betyg F. cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 89 && poang[i] >= 80) { betyg[i] = 'C'; cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 79 && poang[i] >= 70) { betyg[i] = 'D'; cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 69 && poang[i] >= 51) { betyg[i] = 'E'; cout << amnen[i] << " " << betyg[i] << endl; continue; } if (poang[i] <= 50 && poang[i] >= 0); { betyg[i] = 'F'; cout << amnen[i] << " " << betyg[i] << "Underkänd" << endl; continue; } // Här nere skulle du kunna skriva ut ämnet, betyget, och huruvida det är // underkänt, istället för att upprepa den koden om och om igen i varje // if-sats. Men det bygger ju på att du kör if/else if istället för att ha // en continue. } } int main() { LasPoang(); GorOmPoangTillBetyg(); return 0; }

Till sist rekommenderar jag att du alltid kompilerar din källkod med varningar aktiverade. Sannolikt kom det varningar när din kod kompilerade som klagar just på att du försöker lära en array som aldrig någonsin skrivs, men antingen var varningar inte aktiverade i din kompilator, eller så struntade du helt enkelt i dem.

tack för återkopplingen verkligen jag har kodat i 3 veckor på distans så det e inte så många att fråga och få så här utförliga svar ifrån, uppskattar mycket jag förstog det mesta du skkrev och vad jag behöver ändra men inte riktig hur jag ska initiera poäng[5] annars??? trodde att den läste vidare från void läsbetyg att den följde med

int poang[5]; // Oj! Den här arrayen initieras aldrig! Var kommer värdena in
// i den här funktionen? Att detta ens funkar beror på slumpen.

Permalänk
Hedersmedlem
Skrivet av Panatin:

tack för återkopplingen verkligen jag har kodat i 3 veckor på distans så det e inte så många att fråga och få så här utförliga svar ifrån, uppskattar mycket jag förstog det mesta du skkrev och vad jag behöver ändra men inte riktig hur jag ska initiera poäng[5] annars??? trodde att den läste vidare från void läsbetyg att den följde med

int poang[5]; // Oj! Den här arrayen initieras aldrig! Var kommer värdena in
// i den här funktionen? Att detta ens funkar beror på slumpen.

Hej! Du kan till exempel skapa arrayen i mainmetoden, och sedan skicka in en referens till den som argument till end funktionen som läser in värdet, och sedan skicka med den även till nästa funktion som skriver ut betygen.

Eller så har du allt i samma funktion bara. Det är nog den enklaste lösningen. Det kan ju vara så att ni inte gått igenom argument till funktioner eller pekare än vilket egentligen är vad du ska kunna för att göra det.

Det funkar också att ha arrayen din en global variabel.

Hur du ska göra bör framgå av din kurslitteratur, det är svårt att säga vad som är den "tilltänkta" lösningen för var du är i kursen

Permalänk
Medlem
Skrivet av pv2b:

Hej! Du kan till exempel skapa arrayen i mainmetoden, och sedan skicka in en referens till den som argument till end funktionen som läser in värdet, och sedan skicka med den även till nästa funktion som skriver ut betygen.

Eller så har du allt i samma funktion bara. Det är nog den enklaste lösningen. Det kan ju vara så att ni inte gått igenom argument till funktioner eller pekare än vilket egentligen är vad du ska kunna för att göra det.

Det funkar också att ha arrayen din en global variabel.

Hur du ska göra bör framgå av din kurslitteratur, det är svårt att säga vad som är den "tilltänkta" lösningen för var du är i kursen

ok ok nej i beskrivningen av uppgiften står det att vi ska skapa en funktion för läsbetyg
en för görombetyg och sen en för statistik som räknar ihop totala poäng och totalt antal A,B,C,D,E,F inte kommit så långt än dock

Permalänk
Medlem

Kan någon förklara detta c++

jag är så när att klara min uppgift nu hehe men detta kommer upp och får inget felmeddelande men vet att jag skrivit nåt snett med koden

cout << "Antal betyg " << betyg << endl;

jag ska skriva ut betygen ur en array poang[5] men detta kommer upp

Permalänk

Väldigt svårt att säga när vi inte vet hur din kod ser ut men det där ser ut som att du har en counter som räknar uppåt och försöker nå minnesplatser i arrayen som inte är allokerade ännu. Så jag skulle kolla den whileloopen i första hand

Permalänk
Medlem

Nu är det åratal sedan jag skrivit nåt i c++, men om jag minns rätt så behöver funktioner som skriver ut strängar (eller character arrays) ett specialtecken för att veta att strängen är slut.

Du borde kunna göra din character array en character längre och lägga ett '\0' på sista positionen. Då kommer cout terminera utskrifen.

Visa signatur

Louqe Ghost S1 MK3 | Asus ROG Strix B660-I Gaming WiFi | Intel Core i7 12700K | nVidia RTX 2070 Super FE | Corsair 64GB (2x32GB) DDR5 5600MHz CL40 Vengeance | Samsung 980 PRO M.2 NVMe SSD 2TB | Corsair SF750 750W 80+ Platinum | Noctua NH-L12 Ghost S1 edition | Kablar från pslate customs | 2 stk Dell Ultrasharp 3014 | Logitech MX Keys | Logitech MX Anywhere

Permalänk
Medlem

"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)

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)

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