Begynderens Guide til C++

Tags:    c++
Skrevet af Bruger #4996 @ 23.10.2006


Afsnit 13
Udover at regne er det at arbejde med strenge en af de ting programmet oftest gør, så vi må hellere se lidt mere på hvordan man arbejder med strenge.
Vi har allerede set på at man kan holde en streng i en variabel af typen std::string:
Fold kodeboks ind/udKode 

Vi kan også sætte strenge sammen:
Fold kodeboks ind/udKode 

S vil så indeholde "Hej Der".
Men hvis vi har:
Fold kodeboks ind/udKode 

Og gerne vil have S til at indeholde "x = 12", hvad gør man så. Man kunne skrive:
Fold kodeboks ind/udKode 

Men det virker ikke. Det er fordi x er en int og man kan ikke lægge en int til en std::string.
Så vi skal selv lave denne int om til en std::string og derpå lægge dem sammen.
Løsningen er at bruge en std::stringstream.
Fold kodeboks ind/udKode 

En stringstream bruges ca. på samme måde som std::cout, dvs man skriver til den med <<.
Men hvor std::cout skriver på skærmen, gemmer en stringstrem det man putter i den i en std::string.
Denne kan man så hente med SS.str().
Men da vi ofte vil få brug for at lave en int om til en std::string var det måske en god idé at lave det med en funktion:
Fold kodeboks ind/udKode 

For så kan man skrive:
Fold kodeboks ind/udKode 

Hvilket vist er noget kønnere, eller man kan skrive det lidt kortere:
Fold kodeboks ind/udKode 

Men hvad så med double, short og andre typer? Som du så før er der noget der hedder template funktioner, så det ville være logisk at lave ToString om til at være en template funktion, så den kan håndtere alle typer:
Fold kodeboks ind/udKode 

Og der er jo ret elegant.
Men hvad så med den modsatte vej, hvis man har:
Fold kodeboks ind/udKode 

Og gerne vil have int x til at være 123? Igen er std::stringstream løsningen:
Fold kodeboks ind/udKode 

Men der er en ting som vi lige skal være opmærksomme på. Alle tal kan laves om til en std::string, men det er ikke alle std::string der kan laves om til et tal.
Hvis den f.eks. indeholder "Hej der", kan man jo ikke lave det om til et tal.
Heldigvis fortæller >> om det gik godt:
Fold kodeboks ind/udKode 

Og da vi jo er i gang med at lave template funktioner var det nok en god ide at lave en:
Fold kodeboks ind/udKode 

Denne funktion konverterer str til et tal, og returnerer true hvis str indeholder et tal.
Vi kan så bruge den med:
Fold kodeboks ind/udKode 

Det kan næsten ikke blive lettere.

Vi har set at det er ret let at sætte strenge sammen, men hvordan splitter man dem så ad?
For at kunne det har vi brug for to ting: At vide hvor vi vil splitte, og en måde hvorpå vi kan tage en del af en std::string.
Det første kan gøres med en af std::string's mange finde funktioner.
En af dem er find, som finder det første tegn af en type i strengen. Et eksempel:
Fold kodeboks ind/udKode 

Da det første mellemrum i "Hej Du Der" er på plads 3, idet vi tæller fra 0, vil n blive sat til at være 3.
Hvis ikke der var mellemrum i S ville n blive sat til at være std::string::npos.

Vi kan bruge rfind på samme måde til at finde det sidste tegn i strengen.
rfind vil i vores eksempel give 6, da det sidste mellemrum er på plads 6.

På samme måde kan man bruge find_first_of("aeoiyu") til at finde den første vokal i strengen, og find_last_of("0123456789") til at finde det sidste tal i strengen.

Hvis vi vil finde et ord i strengen kan man bruge find("ord") eller rfind("ord").
Når man søger skelnes der mellem store og små bogstaver.

Hvis vi nu vil have det første ord i S over i en anden variabel kan man bruge:
Fold kodeboks ind/udKode 

substr giver en del af strengen fra en plads, i dette tilfælde 0, og et antal bogstaver frem, i dette tilfælde n, som vi før så var 3.
Så S2 bliver sat til at være "Hej".

Hvis vi vil have resten af strengen fra det første mellemrum kan vi skrive:
Fold kodeboks ind/udKode 

Vi lægger 1 til n for at springe mellemrummet over. Da vi kun bruger én parmeter i kaldet til substr får vi resten.

Opgaver
1: Lav regnemaskinen om så regnestykket læses som én streng, f.eks. "123 + 321".
Du skal så splitte denne streng op i tre, det første tal, +-* eller / og det andet tal.
Du kan bruge den FromString funktion som vi lavede før, til at lave disse tal om til int.

2: Vi så tidligere at det ikke var nogen god ide at bruge >> til at læse tal med, hvis brugeren skrev noget der ikke var et tal.
Løsningen på det problem er at bruge std::getline til at læse en std::string, og så bruge samme metode som i FromString til at
lave dette om til et tal.
Lav derfor en template funktion der gør dette.
Den kommer til at ligne FromString men tager kun et argument, det tal som der bliver læst.

Afsnit 14
Fra tid til anden har man brug for at give ting numre, det kunne f.eks. være ugedage, hvor mandag kunne være nummer 0,
tirsdag nummer 1, osv. Man kan selvfølgelig gå og huske på hvad der er hvad, men der findes en mere elegant løsning:
Fold kodeboks ind/udKode 

Dette hedder en enum, som er en forkortelse af enumeration, der betyder noget i retning af "optælling".
I dette eksempel vil mandag være 0, tirsdag 1, osv. Vi kan bruge dette i vores kode:
Fold kodeboks ind/udKode 

UgeDag fra vores eksempel er faktisk en ny type, så man kan også skrive:
Fold kodeboks ind/udKode 

Hvilket kan være meget praktisk.
Hvis man ikke gør noget specielt for de enkelte værdier i en enum bare fortløbende numre.
I nogle tilfælde kan det være praktisk at give dem specielle værdier.
Hvis vi f.eks. vil gøre en ting for alle ugedage kunne man skrive:
Fold kodeboks ind/udKode 

Men det forudsætter at vi husker på at mandag er den første dag i ugen, og søndag den sidste.
Man kan løse det ved at tilføje to værdier til enum'en:
Fold kodeboks ind/udKode 

For så kan man skrive:
Fold kodeboks ind/udKode 

Nu sidder du måske og tænker, hvorfor bruge han ikke UgeDag som type for i?
Men det virker ikke, fordi ++ ikke virker med enum's.
Man kan også give de enkelte værdier i enum'en en talværdi:
Fold kodeboks ind/udKode 

Enum kan antage alle heltals værdier.

Hvis man skulle skrive en funktion der udskriver navnet på en ugedag, kunne man skrive koden som:
Fold kodeboks ind/udKode 

Og så videre. Men der er en mere elegant måde at gøre det på:
Fold kodeboks ind/udKode 

Det kaldes en switch, det fungerer på den måde at man hopper fra switch'en til den case som passer med det man switcher på.
Og udfører koden indtil den møder break, så hopper den ud.

Man kan switch'e på alle heltal, også bogstaver:
Fold kodeboks ind/udKode 

I dette tilfælde vil den hoppe til default hvis ikke ch er j eller n.

Man kan lave alt det kode man vil efter case, det behøver ikke kun være en linie.
I nogle tilfælde springer man break over:
Fold kodeboks ind/udKode 

Her vil den skrive "Hej Verden" to gang hvis n er 2, 1 gang hvis den er 1, 0 gange hvis den er 0, og "Det forstod jeg ikke" i alle andre tilfælde.
Men som regel er det en forglemmelse hvis ikke der står break, så husk det nu.

Opgvave
Lave en enum for de fire regnearter. Lav regneprogrammet om så det laver bogstavet for regnearten om så det bruger denne enum.
Du kan lave det så plus = '+', så behøver du ikke oversætte.
Brug så en switch til at vælge hvilket regnestykke der skal laves.

Afsnit 15
Vi har set på hvordan man kan oprette variable til at indeholde ét tal eller én streng.
Men ofte har man brug for flere af disse for at beskrive en "ting".
Hvis vi f.eks. arbejder med grafik på en flade, ville vi bruge en x og en y til at beskrive et punkt.
Ville vi lave en telefonbog skulle den mindst indeholde navn og telefon nummer.
Den simple måde at samle sådan information i C++ er vha. en struct.
Hvis vi tager eksemplet med punktet fra før kunne man gøre det på denne måde:
Fold kodeboks ind/udKode 

Her har vi lavet en ny type kaldet Punkt, der indeholder to variable, x og y.
Vi kan så oprette en variabel af denne type:
Fold kodeboks ind/udKode 

p er her variablen, man siger også at p er et objekt.
Vi kan nu få fat i p's x og y med .
Fold kodeboks ind/udKode 

Man siger at x og y er medlemmer af Punkt, eller medlems variable.
Variabler af typen Punkt opfører sig på samme måde som andre variabler:
Fold kodeboks ind/udKode 

Bemærk måden vi tilskriver p1 dens værdi, man skriver værdierne i samme rækkefølge som de står i struct'en.
Vi kan også sætte den ene til at være lig den anden, men vi kan ikke umiddelbart sammenligne dem med ==

Skulle vi lave en telefonbog kunne vi lade hver opslag se sådan ud:
Fold kodeboks ind/udKode 

Selv om man nok i praksis vil bruge en std::string til nummer, for at det kan indeholde mellemrum og andre special tegn.

Der er også en standard struct det er rart at kende, den kaldes tm, og bruges til at holde styr på et tidspunkt.
Den kan bruges med:
Fold kodeboks ind/udKode 

Time er objektet af typen tm. memset bliver brugt til at nulstille den, det er nødvendigt, ellers vil programmet (måske) bryde ned når du kører det.

De næste linier bliver brugt til at sætte de enkelte fælter i Time. Bemærk at den regner år 1900 som år 0, så du skal trække 1900 fra årstallet for at få det rigtige resultat.

tm_mday er dag i måned, første dag er 1. tm_mon er måned, første måned, januar, er, sært nok, 0.

Kaldet til asctime laver tiden i tm format om til en streng, denne udskrives, resultatet kunne se sådan ud:
Sun Jul 12 11:10:00 2006

Man kan beregne forskellen på to tider i tm format, vha. difftime funktionen, men først skal man lave tiden om til time_t format:
Fold kodeboks ind/udKode 

Forskellen er i sekunder.
Man kan hente den nuværende tid vha. time, man får tiden i time_t format:
Fold kodeboks ind/udKode 

Man kan lave denne time_t om til en tm med localtime:
Fold kodeboks ind/udKode 

Dvs localtime laver det modsatte af mktime.

Hvis du undrer dig over hvad de & der bruges i diverse kald og * foran localtime betyder, så må du indtil videre nøjes med at vide at de skyldes at der arbejdes med pointere.
Jeg skal nok forklare dem senere.
Opgave
Lav en funktion der beder brugeren om at indtaste sin fødselsdag, og få så programmet til at skrive hvor mange sekunder og timer han er gammel.
Det vil nok være praktisk at lave en funktion der beder brugeren om fødselsdag, og så lave resten i en anden funktion.



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (83)

User
Bruger #2695 @ 23.10.06 22:38
Godt arbejde Bertel. Thumbs up !

Der var dog lige lidt, jeg faldt over.

1) Du bruger godt nok <iostream> men ikke <ctime> og <cstdlib>. Istedet bruger du <time.h> og <stdlib.h>. Hvorfor ?

2) Du returnerer ikke noget i din main metode, som ellers er defineret til at returnere en int. gcc compileren kommer med en warning (når man bruger '-Wall' parametren), så det vil være god skik altid at returnere 0 fra sin main metode.
User
Bruger #4996 @ 23.10.06 23:19
1: Både ctime og time.h er standard C++ headere. Af gammel vane bruger jeg .h versionerne. iostream.h er ikke en standard headerfil. Visual C++ 6.0 forstår ikke std::localtime.

2: Ifølge C++ standarden behøver man ikke return fra main, det skal give det samme som at returnere 0. I C skal man returnere noget. MinGW version 3.4.2 giver ingen warning ved at udelade return 0;
User
Bruger #3275 @ 24.10.06 17:13
En helt fantastisk artikel! Bliver med garanti et godt redskab når jeg skal til at gå i gang med C++.
User
Bruger #10769 @ 29.10.06 10:51
Det er en fantastisk artikel jeg lærte helt vildt meget men jeg har et lille spørgsmål angående den lommeregner man kan lave når man har tasted tal1 og 2 og trykker enter så forsvinder den inden man når at se resultated

det her er den kode jeg har brugt:

#include <iostream>
int main()
{
int x, y;
std::cout << "Tal 1: ";
std::cin >> x;
std::cout << "Tal 2: ";
std::cin >> y;
std::cout << x << " + " << y << " = " << x + y << std::endl;
std::cout << x << " * " << y << " = " << x + y << std::endl;
std::cout << x << " - " << y << " = " << x + y << std::endl;
std::cout << x << " / " << y << " = " << x + y << std::endl;
std::cin.get();
}
håber du kan hjælpe mig:P
User
Bruger #3353 @ 29.10.06 22:58
lige en lille ting. du skriver at man kan bruge c++ til at lave styresystemer som Windows. det passer dog ikke helt da der ligger meget andet og lavere kode bag noget som windows. specielt i kernenen.
User
Bruger #4996 @ 30.10.06 00:43
>jesper veile, put en ekstra std::cin.get() ind til slut.
Den første "spiser" den newline der er tilbage efter >> y, den sidste venter på en ny enter.

>Smurf Killer, ja der er næsten nødvendigt med en anelse assembler og nok også lidt C kode i kernen. Men 98% af et styresystem som Windows kunne laves i C++.
User
Bruger #8985 @ 31.10.06 20:39
Bertel > HOLD KÆFT!!!!!! ...

... hvor er du god :D 9 sider !!!
User
Bruger #10769 @ 31.10.06 21:58
Hej det er jesper igen jeg vil barer gerne vide men en er de første koder er der en artikel om hvor programmet svarer tilbage igen hvordan for man den til at spørger om et nyt spørgsmål efter den har svaret.



Hilsen jesper:lol:
User
Bruger #10769 @ 31.10.06 22:04
Hey flerer problemer hehe
nu hvor der står at man ska prøver at lave 3 tabellen men jeg kan ikke rigtig se hvad den kode du har skrevet til har noget med det at gøre:lol:
User
Bruger #4996 @ 31.10.06 22:57
Jesper, jeg foretrækker at svare på disse og lignende spørgsmål i tråde oprettet til formålet i C++ foraet.

Anyway, til det første; du skal lige vente til at du har lært om while, i afsnit 9.

Du kan udskrive hvert 3. tal med:
int i;
for(i = 1; i <= 30; i += 3)
std::cout << i << " ";
Eller du kan:
int i;
for(i = 1; i <= 10; i++)
std::cout << i*3 << " ";
User
Bruger #8502 @ 07.11.06 10:04
Jeg er forholdsvis ny til C++ - Så denne guide, burde, passe til mig, ikke sandt?

Nu er det måske en anelse unfair, at jeg lige har gået cplusplus' tutorial igennem. - Og ikke kan udgå at sammenligne.

Mine point til dig, Bertel, fordeles således (så retfærdigt som muligt):

- Først og fremmest vil jeg give dig ét point, for denne guide som helhed. - Flot initiativ, flot du gider.

- Du får ét point, for din meget pædagogiske skrift. - Dét point tager jeg så igen pga. _MANGE_ "slåejl", hvilket også inkluderes i koderne, desværre.

- Du får ét point for flot, dog meget kort, at gennemgå de mest "basic" emner.

- Efter jeg havde læst cplusplus' tutorial havde jeg stadig meget svært ved et forstå konceptet med pointere, et problem som nu er løst. Du får ét point for et flot afsnit omkring pointere.

Hvorvidt jeg endten har en dårlig korttidshukommelse, eller om du har skrevet sammenhænget mellem kodeeksemplerne, en smule uklart, lader jeg tvivlen komme dig til gode, og trækker ikke et point. - Men tænk over det.

Til sidst vil jeg blot tilføje et tak.

- Steffen.
User
Bruger #4996 @ 07.11.06 22:51
Steffen, jo guiden burde passe dig.

Jeg har forsøgt at undgå "slåfejl" specielt i kode stumperne, da de kan virke meget forstyrrende.
Jeg ved der er en fejl i det andet eksempel i afsnit 25, der burde stå ... i catch'en.
Hvis du finder andre fejl må du meget gerne skrive dem, så andre kan få glæde af det. Jeg kan, så vidt jeg ved, ikke rette artiklen :-(

Jeg forstår ikke afsnittet "Hvorvidt jeg endten ..."
User
Bruger #8502 @ 08.11.06 08:15
Okay.

Mener dog at have løbet ind i nogle markante undervejs.. kan dog ikke huske hvor (så er det selvfølgelig også nemt for mig, at beskylde ;))

- Jeg kender dog ikke til den du nævner.

Men "slåfejl" i selve guiden (altså uden for kodeeksemplerne) er også frustrerende, da det tit gør, at man skal læse samme sektion flere gange for, at forstå samenhænget (jeg forstår, at du ikke kan rette det).

Det jeg mener til slut i min kommentar er at;
1. Jeg husker dårligt fra kodeesempel til kodeeksempel (hvilket resulterer i, at jeg tit ikke forstår sammenhænget).
2. Der er intet sammenhæng, og i dette tilfælde mener jeg at det endten er en smule uklart "sat op", eller at man skule være blevet gjort opmærksom på det fra start.

Det jeg vil frem til er meget bogstaveligt at; I mine øjne har variablerne i kodeeksemplerne tit ingen værdier (hvilket godt kan være forvirrende for "sådan en som mig").

- Steffen
User
Bruger #8502 @ 08.11.06 08:21
Bah, glemte så lige pointen i den sidste del.

Min pointe er så, at når jeg har opfattelsen "Det jeg vil frem til.." er endten 1. eller 2. tilfælde sandfærdig :)
- Og lod min tvivl komme dig til gode.

- Steffen
User
Bruger #1151 @ 12.11.06 14:06
Eneste jeg synes artiklen mangler er en oversigt i starten som giver hvert afsnit en overskrift om hvad afsnittene handler om. Ellers er det dejligt at se en sådan artikel.
User
Bruger #8280 @ 13.11.06 14:13
Godt arbejde Bertel!... Highfive herfra!
Velformuleret og fornuftig gennemgang
User
Bruger #8516 @ 24.11.06 14:12
Den mini lommeregner du er igang med, hvis man skriver de 2 tal, så trykker på enter, så forsvinder skærmen, har forsøgt med at sætte std::cin.get(); ind men det hjalp ikk!

Hvad gør man så ?
User
Bruger #4996 @ 25.11.06 14:07
Jacob Veile, put en ekstra std::cin.get() ind til slut.
Den første "spiser" den newline der er tilbage efter >> y, den sidste venter på en ny enter.
User
Bruger #11095 @ 04.01.07 13:58
jeg forstår ikke rigtigt det med ++x og x++. du siger ++x tælles x op inden resultatet. men hvad skal tælles op? x er jo = 1(?) og hvad er resultatet?

skide godt initiativ at lave denne artikel! er til stor hjælp!!
User
Bruger #4996 @ 04.01.07 20:46
Det er i begge tilfælde x der tælles én op.

Prøv at kikke på:
#include <iostream>
int main()
{
int y = 1;
int x = 1;
std::cout << ++y << std::endl;
std::cout << x++ << std::endl;
std::cout << x << std::endl;
std::cout << y << std::endl;
std::cin.get();
}
Hvad sker der når du kører det?

Først skriver den 2, da y tælles en op (fra 1) inden den udskrives.
Så skriver den 1 fordi x tælles en op (fra 1) efter den udskrives.
Til slut skriver den 2 og 2 da både x og y ender med at være 2
User
Bruger #11095 @ 05.01.07 13:38
aha! super du! du får forresten lige en 5'er :)
User
Bruger #11115 @ 09.01.07 03:24
Har problemer med if ! Jeg får hele tiden en fejl når jeg kompiler med den:
3 C:\\Documents and Settings\\Pixi\\Skrivebord\\main.cpp expected unqualified-id before "if"

3 C:\\Documents and Settings\\Pixi\\Skrivebord\\main.cpp expected `,' or `;' before "if"

Koden:
Fold kodeboks ind/udKode 
User
Bruger #4996 @ 09.01.07 20:05
Du bliver nødt til at putte koden ind i en main. Man kan ikke afvikle kode vilkårlige steder i sin .cpp fil, medmindre det er del af en variabel initialisering.

Derudover har du ingen erklæring af y og x
Et komplet eksempel:
Fold kodeboks ind/udKode 

Jeg foretrækker stadig at svare på spørgsmål om C++ i C++ fora, medmindre de direkte har relevans for tutorialen.
User
Bruger #7954 @ 16.01.07 00:29
Den helt nye C++ programmør ville måske have mere gavn af at hente Microsoft Visual C++ Express (den er gratis).

Desuden er Microsofts compiler (sammen med Intels) den compiler, der er tættest på at overholde hele C++ standarden (GCC er dog ikke lang bagefter)
User
Bruger #4996 @ 16.01.07 19:57
Visual C++ er også en mulighed, jeg synes at den er stor, tung og bøvlet at bruge.
User
Bruger #8985 @ 21.01.07 17:42
Jeg har aldrig prøvet Visual C++ Express, men hvis det er et low-level sprog, så er det jo ikke andet end en bunke **** for en bunke ****** noobs, der vil lave programmer med et tastetryk. Jeg synes C++ er utroligt dejligt, fordi det ikke er "let" - som jeg synes Delphi og Visual Basic er - og fordi man har så meget mere kontrol over sit program.

Den helt nye C++ programmør har helt klart mest gavn af C++, ikke andet :bounce:
User
Bruger #11266 @ 29.01.07 19:01
hej alle den if(Y != 0) vil dev c++ ik compill
kommer med fejl, og en ting jeg har lagt mærke til er ingen
bruger using namespace std; i stede for at sku skrive std hele tiden.?:)
User
Bruger #11266 @ 29.01.07 19:08
hej alle den if(Y != 0) vil dev c++ ik compill
kommer med fejl, og en ting jeg har lagt mærke til er ingen
bruger using namespace std; i stede for at sku skrive std hele tiden.?:)
User
Bruger #11266 @ 29.01.07 23:13
ku ik finde ud af din lommeregner der så jeg lege lidt med den
ps er ny til c++ men tag et kig på det her og sig hvad du syndes

#include <iostream>
using namespace std;
int main ()
{
int a, b;
cout << "tast tal: \\n";
cin >> a >> b;
{
cout << "summen er\\n " << a*b << "\\n";
}
cin.get();




cout << "summen er\\n" << a+b << "\\n";
cout << "summen er\\n" << a/b << "\\n";

cin.get();
cin.get();
return 0;

}
User
Bruger #4996 @ 30.01.07 19:26
Martin, jeg synes at du skal oprette et spørgsmål i udvikleren.dk's c++ forum:
http://www.udvikleren.dk/C/Forum.aspx

Og nøjes med at skrive kommentarer til artiklen her.
User
Bruger #4996 @ 31.01.07 20:53
jeg har lagt mærke til er ingen bruger using namespace std; i stede for at sku skrive std hele tiden.?


Prøv at se sidste del af afsnit 1.
User
Bruger #11293 @ 02.02.07 21:55
I stedet for at bruge cin.get(); til at stoppe, kan man "bare" sende en systembesked om at holde en pause indtil en tast trykkes... system("pause");

...Og dejlig jordnær artikel ;)
User
Bruger #4996 @ 03.02.07 13:19
system("pause"); tricket virker kun på Windows.
User
Bruger #11293 @ 04.02.07 00:51
Så vidt jeg er bekendt er det da også kun windows der lukker prompterne? ...Min mac gør i hvert fald ikk'.

...Bare en tanke
User
Bruger #7786 @ 19.02.07 19:32
fin guide.. jeg lærte meget af den! Forstod det hele fint! en femmer herfra!
User
Bruger #11452 @ 01.03.07 11:39
Davs Bertel,
dine if kodeopstillinger virker ikke... Du siger på et tidspunkt i ovenstående kommentarer at man skal bruge main for at få det til at virke... Ville det så ikke være lidt nemmere at gå til, hvis du havde lavet nogle kodeeksempler, hvor du rent faktisk havde brugt if-kommandoen i denne sammenhæng?!? Det er noget frustrerende at side som nybegynder og ikke kunne få koderne til at virke...

Mvh. Camilla
User
Bruger #4996 @ 03.03.07 14:06
Jeg burde nok have lavet nogle flere af eksemplerne som komplette eksempler med main, men jeg synes også at eksemplerne skal være korte og overskuelige, så det er en balance.
Jeg er i gang med en opdatering af artiklen og din kommentar vil naturligvis blive taget under overvejelse, sammen med de øvrige kommentarerer.

Det første if eksempel fra afsnit 4 kunne se sådan ud:
Fold kodeboks ind/udKode 
User
Bruger #11480 @ 06.03.07 19:11
hej bertel.
jeg kunne godt tænke mig at lære lidt om programmering osv. hvor kan man finde c++ henne?

-out
User
Bruger #11480 @ 06.03.07 19:20
hej bertel.
jeg kunne godt tænke mig at lære lidt om programmering osv. hvor kan man finde c++ henne?

-out
User
Bruger #4996 @ 07.03.07 23:43
Du kan finde en compiler mm, her:
http://www.codeblocks.org/

Hvis du downloader versionen "with MINGW compiler" har du alt der skal til for at komme i gang.
User
Bruger #6559 @ 27.03.07 19:23
Det er en super artikel, og skidt med slåfejl, vi er jo ikke alle perfekte, og desuden er kompileren med til at lette det :D håber der kommer en artikel fra dig mere med lidt mere avancerede strukturer :D Keep up the good work
User
Bruger #11468 @ 29.03.07 14:51
Når jeg går ind i Code::blocks v1.0 så når jeg trykker F9 kommer der ingen boks frem , den skriver bare nede for neden :

Project : Console application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\\Users\\Gangster Wulff\\Documents\--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.cpp
mingw32-g++.exe: installation problem, cannot exec `cc1plus': No such file or directory
(Rød tekst her fra.)Process terminated with status 1 (0 minutes, 0 seconds)

Hvad er fejlen ?
og jeg satte denne her kode ind:

#include <iostream>
int main()
{
std::cout << "Hello World" << std::endl;
std::cin.get();
}


User
Bruger #10050 @ 01.06.07 15:40
hold kæft den her artikel sparker røv;). den styrer. da jeg lige er gået igang med C++ er den superr god. 5 herfra
User
Bruger #11328 @ 26.06.07 14:28
hehe hvis man dividerer med 0 kan man da bare skrive:
Fold kodeboks ind/udKode 


ikk så svært! fandt ud af det første gang selvom jeg aldrig havde prøvet c++ før...
User
Bruger #11328 @ 26.06.07 14:29
men ellers hamrende god artikel !5!
User
Bruger #12099 @ 02.07.07 14:14
Hej, kanon fed artikel :D Men jeg har det samme problem som Martin, hvad er der galt? Og hvordan kan det løses?
En femmer ;)
User
Bruger #11197 @ 24.10.07 10:03
Det er sku godt lavet.
User
Bruger #12570 @ 27.10.07 11:59
Hej
Super. Men jeg må lige kommenterer, at jeg savner et index eller en indholdsfortegnelse.

Mvh
Carsten
User
Bruger #12837 @ 20.11.07 20:34
Hej .. Er en 13 årig dreng der roder lidt med programmering.. Ved godt jeg er lidt sent ude men har en udbedrelse af Martin's lommeregner.. #include <iostream>
using namespace std;
int main ()
{
int a, b;
cout << "Tast tal 1: \\n";
cin >> a;
cout << "Tast tal 2: \\n";
cin >> b;
{

cout << "Gange=" << a*b << "\\n";
}
cin.get();




cout << "Plus=" << a+b << "\\n";
cout << "Minus=" << a-b << "\\n";
cout << "Divider=" << a/b << "\\n";

cin.get();
cin.get();
return 0;
User
Bruger #12976 @ 14.12.07 16:13
Hej.
Jeg har lidt problemer med at forstå det med x++, ++x.
Også det med loops.
Jeg synes det bliver forklaret lidt for hurtigt. Jeg ved næsten intet om C++ så jeg forstår ikke så meget af det.
Så kunne du ikke please forklare det lidt bedre?
User
Bruger #13186 @ 23.01.08 17:37
Vil det ikke være nemmere at at skrive:
Fold kodeboks ind/udKode 

så behøves du ikke at skrive std så mange gange.


Men ellers god artikkel
:D

-FredeK
User
Bruger #13276 @ 07.02.08 17:54
jeg har prøvet at lave regnemaskinen om så den bruger template. Men det fungere ikke rigitgt. Kan ikke finde fejlen. Kan du hjælpe mig?
Fold kodeboks ind/udKode 
#include <iostream>
#include <string>

template <typename T1, typename T2>

T1 plus(T1 x, T2 y);
T1 minus(T1 x, T2 y);
T1 gange(T1 x, T2 y);
T1 divsion(T1 x, T2 y);
int main()
{
std::cout << "tal 1" << std::endl;
double tal1;
std::cin >> tal1;
std::cout << "skriv a for +, b for -, c for * og d for /" << std::endl;
std::string streng1;
std::cin >> streng1;
std::cout << "tal 2" << std::endl;
double tal2;
std::cin >> tal2;
if(tal2==0&&streng1=="d")
{
std::cout << "fejl" << std::endl;
}
if(streng1=="a")
{
std::cout << plus(tal1, tal2) << std::endl;
}
if(streng1=="b")
{
std::cout << minus(tal1, tal2) << std::endl;
}
if(streng1=="c")
{
std::cout << gange(tal1, tal2) << std::endl;
}
if(streng1=="d"&&tal2!=0)
{
std::cout << divsion(tal1, tal2) << std::endl;
}
if(streng1!="a"&&streng1!="b"&&streng1!="c"&&streng1!="d")
{
std::cout << "fejl" << std::endl;
}
return 0;
}
T1 plus(T1 x, T2 y)
{
return x + y;
}
T1 minus(T2 r, T3 t)
{
return r - t;
}
T1 gange(T2 p, T3 o)
{
return p * o;
}
T1 divsion(T2 k, T3 l)
{
return k / l;
}

ellers godt arbejde
User
Bruger #13276 @ 07.02.08 17:55
ups.. fik den vist ikk li ind i den kodeboks.. ;)
User
Bruger #13527 @ 30.03.08 18:14
Svar venligst en Dummi
Jeg gør præcis hvad du skriver, og programmet svarer:
"1 - Debug" uses an invalid compiler. Skipping...
Nothing to be done.
Hwa gør jeg (forkert)?
Animal
User
Bruger #10863 @ 13.07.08 00:08
#include <iostream>
int main()
{
int x, y;
std::cout << "Tal 1: ";
std::cin >> x;
std::cout << "Tal 2: ";
std::cin >> y;
std::cout << x << " + " << y << " = " << x + y << std::endl;
std::cout << x << " - " << y << " = " << x - y << std::endl;
std::cout << x << " * " << y << " = " << x * y << std::endl;
if(x && y > 100)
{
std::cout << x << " / " << y << " = " << x / y << std::endl;
else if(x < y)
std::cout << y << " / " << y << " = " << y / x << std::endl;
std::cout << "tallene er byttet om pga. y er større end x" << std:endl;
}
std::cin.get();
std::cin.get();
}


Hvad er der galt der?
User
Bruger #10863 @ 13.07.08 00:09
Forresten meget god artikel!!!;)
User
Bruger #714 @ 06.10.08 15:44
Hey Bertel.

Jeg sad lige og læste din artikel igennem igen af ukendte årsager (er faktisk på vej til at skulle noget :p).

Jeg "faldt" over dette:
"En bool kan kun have to værdier; false eller true. false er 0, true er 1, det kan man se ved at forsøge at skrive dem ud."

- Er det ikke sådan i C++ ligesom det er med f.eks. PHP at false er 0 og true er alt andet? Her mener jeg, hvis du konverterer andre typer, via typecast eller w/e, til bool?

Jeg har egentlig ikke alt for meget styr over det, men det føler jeg mig overbevist om at du gør :p

Et lille eksempel:

Fold kodeboks ind/udKode 
User
Bruger #14446 @ 29.11.08 16:02
Super godt lavet den er let for en begynder som mig og den hjælper! jeg er ikke noget vildt langt men jeg giver den 5!
User
Bruger #14212 @ 19.03.09 20:33
Syntes det er en okay artikel. _MEN_ Du kunne på en måde godt have forklaret nogen ting bedere. For eksempel har jeg ikke fattet en pjælle af vector.. Hvordan vil koden se ud til en vector osv. Eller nice job.
User
Bruger #8985 @ 15.04.09 03:31
"lige en lille ting. du skriver at man kan bruge c++ til at lave styresystemer som Windows. det passer dog ikke helt da der ligger meget andet og lavere kode bag noget som windows. specielt i kernenen. "

Det er jo to forskellige ting. Det ene udtryk går på, at man kan lave et windows-lignende OS i C++. Det andet udtryk går på, at Windows ikke kun er lavet i C++. Alligevel blander du dem sammen.

Bertel sagde ikke, Windows var lavet i C++ alene. Han sagde, noget lignende Windows kunne laves i C++. Det betyder dog ikke, at Microsoft har valgt at gøre det på den måde.
User
Bruger #8985 @ 15.04.09 14:28
"lige en lille ting. du skriver at man kan bruge c++ til at lave styresystemer som Windows. det passer dog ikke helt da der ligger meget andet og lavere kode bag noget som windows. specielt i kernenen. "

Det er jo to forskellige ting. Det ene udtryk går på, at man kan lave et windows-lignende OS i C++. Det andet udtryk går på, at Windows ikke kun er lavet i C++. Alligevel blander du dem sammen.

Bertel sagde ikke, Windows var lavet i C++ alene. Han sagde, noget lignende Windows kunne laves i C++. Det betyder dog ikke, at Microsoft har valgt at gøre det på den måde.
User
Bruger #14899 @ 19.04.09 12:07
Jeg har et problem med at forstå starten i afsnit 5.
Du skriver at x = y % z; er det samme som
x = y - (y / z)*z;
og at det skulle kunne finde resten i regnestykket. Men rent matematisk vil y - (y/z)*z = y - yz/z = y - y/1 = y - y = 0
altså er x = y - (y/z)*z = 0 ?? så x = 0 ligegyldigt hvilke tal du putter ind. Men computeren læser det åbenbart anderledes? forklaring tak.
User
Bruger #14899 @ 19.04.09 12:20
Glem det jeg fandt ud af det ved at spørge i en mirc channel :P blev flamet godt og grundigt xD
User
Bruger #14905 @ 21.04.09 09:47
Rigtig spændende!

Dog kan jeg bare ikke få skrevet artiklen ud i et printvenligt format. Kan den fås som PDF?
User
Bruger #14855 @ 20.06.09 14:02
Denne artikel sparker SUPER NUMSE!!!!!!!!!!!!!!!! Bang ! Super god, man kan lære en masse af dette ! 1000 ud af 5!
User
Bruger #14855 @ 22.06.09 15:03
Bertel du er kraft ojme min GUD! GUD GUD GUD!!!!
User
Bruger #14855 @ 22.06.09 15:05
Frederik Kongsgaard:

Har han skrevet , BUT! Han skrev at han heller vil med det andet ( eller noget i den stil ) Forståeligt :)
User
Bruger #14855 @ 23.06.09 14:19
Wtf hvad her bertel lige lavet her ?

[/pre]
std::cout << "Vil du? ";
char ch = GetBogstav();
if(ch == 'j')
std::cout << "Ok" << std::endl;
[/pre]

Forsøg:

Fold kodeboks ind/udKode 
User
Bruger #14855 @ 23.06.09 14:20
Sejt man kan lave {pre} og {/pre} istedet for {code} og {/code}

Skift {} ud med []
User
Bruger #14510 @ 02.07.09 23:22
super flot skrevet og har fået meget ud af at læse den :D
User
Bruger #16633 @ 19.05.11 18:29
plzz hjælp mig med afsnit 3 bare skriv hvad man skal altså jeg prøver sådan her men virker bare ikke jeg er heller ikke så god til det begyndte for en time siden.

#include <iostream>
#include <string>'

using namespace std;

int main()
{
std::getline << std::string << "jacob";
}
std::cout << "hej jacob"
{
User
Bruger #16633 @ 19.05.11 18:33
og plzz svar :bounce:
User
Bruger #16633 @ 19.05.11 18:34
:bounce:
User
Bruger #4996 @ 27.05.11 20:20
Jeg havde overset din kommentar, det er bedre at stille et normalt spørgsmål, men:
[
Fold kodeboks ind/udC++ kode 
User
Bruger #17050 @ 12.02.12 17:31
Hej jeg har et spørgsmål angående opgaven i afsnit 8.

her har jeg prøvet at lave den del der skulle plusse de to tal hvis du trykker 1 men det virker ikke. Lige ud set hvad jeg gør udskriver den min linje der siger "fejl".
Vil du venligst hjælpe mig med at rette fejlen, og eventuelt fortælle mig hvordan man gør det mugligt at både +, -, /, *.





#include <iostream>
#include <string>
using namespace std;
int main()
{
int x, y;
cout << "tal 1: ";
cin >> x;
cout << "Tal 2: ";
cin >> y;

cout << "1 = +" << endl;
cout << "2 = -" << endl;
cout << "3 = *" << endl;
cout << "4 = /" << endl;
cin.get();
cin.get();
int a;
if(a == 1)
{
cout << x << " + " << y << " = " << x + y << endl;
}
else
{
cout << "fejl" << endl;
}
}
User
Bruger #17050 @ 12.02.12 18:24
undskyld har fundet en løsning.:)
User
Bruger #17815 @ 13.01.14 16:29
hvor kan man downloade c++
User
Bruger #17815 @ 13.01.14 16:31
hvor kan man downloade c++ ?
User
Bruger #17815 @ 13.01.14 16:31
hvor kan man downloade c++ ?
User
Bruger #17815 @ 13.01.14 16:31
hvor kan man downloade c++ ?
User
Bruger #17815 @ 13.01.14 16:31
hvor kan man downloade c++ ?
User
Bruger #17815 @ 13.01.14 16:33
-
User
Bruger #17815 @ 13.01.14 16:33
beklager jeg kom til at skrive det så mange gange
Du skal være logget ind for at skrive en kommentar.
t