Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  62 5480
Har hatt veldig lyst til å lære meg å programmere en stund, og for et par dager siden fant jeg "Teach Yourself C++ in 21 Days" på google (http://newdata.box.sk/bx/c/). Så jeg lasta ned Dev-C++, og leste meg halveis igjennom dag 1. Da kom jeg til selve programmeringen, og skulle programere "Hello world!".
Jeg skrev inn koden i kompileren, og trykka på execute. Det kom ingen feilmeldinger, men når jeg åpna programmet, skjedde det ingenting, utenom at jeg så en snurt av et ms-dos vindu som forsvant igjen med en gang.. Mistenker at programmet avsluttes av seg selv, slik at jeg ikke får sett det..
Vet btw at det finnes en del tråder om C++, men jeg fant ingenting om dette problemet.
<edit>Fikk bekrefta mistanken min nå.. Trykka print screen akkurat når vinduet puppa opp, og når jeg pasta det i paint, så jeg "Hello World!" ...</edit>
Sist endret av steili; 5. mars 2004 kl. 17:20.
z0p
uʍop ǝpısdn
z0p's Avatar
Kjør programmet i ledetekst.. (cmd, command)
1. d4
steili's Avatar
Trådstarter
Kjørte det i ledetekst, og VIPS der funka det.. Men det skal vel virke i "windows" og..?
Ja, men du må ha en system pause under selve Hallo wolr saken, slik at du må trykke en tast før det lukker seg.
1. d4
steili's Avatar
Trådstarter
Greit.. Men jeg trodde da at det gikk ann å skifte på noe i windows slik at man måtte avslutte vinduet manuelt.. Anyway, hvordan lager man en system pause?
Slik:

Kode

system("pause");
Eksemple på det i en hello world kode:

Kode

#include "stdafx.h"
#include "stdlib.h"
#include "iostream"



int main(int argc, char* argv[])
{

	std::cout <<"Hei verden\n";
system("pause");

	return 0;
}
evt bare kjøre at programmet skal vente på et tastetrykk før det avsluttes..
Det e jo det en system pause er morten...
Det du også kan bruke (som jeg bruker), er conio.h og getch();

Kode

#include <iostream.h>
#include <conio.h>

int main()
{
	cout << "Hello World!";
	getch();
 return 0;
}
Her har jeg brukt iostream.h og cout med tanke på at jeg har brukt samme boka selv, og der bruker de iostream.h ,istedenfor iostream og std::cout (evt. using std::cout og deretter cout) som jeg personlig bruker.

Edit: Hver gang du skriver getch(); pauser den, og du må trykke en tast for å fortsette.
HaZnO: conio.h er vel strengt tatt en Borland-spesifikk header, og mao. ikke ANSI-standard (selv om mange andre compilere støtter det også).

Øby: stdafx.h dukker gjerne opp i MSVC, men ikke andre steder. Dessuten er det vel bedre å bruke <> istedenfor "" på standard-headere.

For å klare opp i all evt. forvirring, her er en helt ANSI måte å få dette til på (funker kun i Windows, av åpenbare årsaker).

Kode

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
      cout << "Hello world!";
      system("pause");
}
rune420: Jeg er fullt klar over det, men som sagt; jeg har holdt på med "Teach Yourself C++ in 21 Days" selv, og her bruker de Borland C++ Compiler. Derfor brukte jeg et eksempel som er relatert til denne compiler'n
1. d4
steili's Avatar
Trådstarter
Lurer bare på en ting..

Hvorfor bruker man void main() i denne koden, i stedet for int main()?

1: // *****************
2: // Demonstrates typedef keyword
3: #include <iostream.h>
4:
5: typedef unsigned short int USHORT; //typedef defined
6:
7: void main()
8: {
9: USHORT Width = 5;
10: USHORT Length;
11: Length = 10;
12: USHORT Area = Width * Length;
13: cout << "Width:" << Width << "\n";
14: cout << "Length: " << Length << endl;
15: cout << "Area: " << Area <<endl;
16: }
Vis hele sitatet...
Dette er en veldig omdiskutert filleting (spesielt på njus, f.eks. her), og for å unngå opphisselse blant standard-tilbedere, er det nok best å benytte syntaksen

Kode

int main()
{
}
evt. med en return 0; på slutten (dette er strengt tatt ikke nødvendig hvis du har en standard-kompliant kompilator).

EDIT: Fant forresten en fin link hvis du vil fordype deg litt mer i dette: http://users.footprints.net/~kaz/cppvoidmain.html
Sist endret av rune420; 7. mars 2004 kl. 12:46.
1. d4
steili's Avatar
Trådstarter
Opprinnelig postet av HaZnO
rune420: Jeg er fullt klar over det, men som sagt; jeg har holdt på med "Teach Yourself C++ in 21 Days" selv, og her bruker de Borland C++ Compiler. Derfor brukte jeg et eksempel som er relatert til denne compiler'n
Vis hele sitatet...
Sikker på det? Har ikke lest ennå at dette gjelder spessielt for Borlands compiler.. Uansett stod det at alle kodene (eller hva man kaller det) følger ANSI standaren, så kodene skal funke i alle kompilerer.. Jeg bruker Dev C++, er vel ingen problem det?
Opprinnelig postet av steinarlima
Sikker på det? Har ikke lest ennå at dette gjelder spessielt for Borlands compiler.. Uansett stod det at alle kodene (eller hva man kaller det) følger ANSI standaren, så kodene skal funke i alle kompilerer.. Jeg bruker Dev C++, er vel ingen problem det?
Vis hele sitatet...
Den følger ikke ANSI hvis den bruker funksjoner fra conio.h. Men de fleste Windows/DOS-compilere støtter allikevel denne headeren (selv om den opprinnelig stammer fra en eller annen gammel Borland compiler).
Problemet oppstår hvis du skal kjøre koden over på Linux/Solaris etc., koden er ikke garantert portabel til andre OS.
Jeg sa ikke det gjelder SPESIELT for Borlands compiler, men at Borland støtter denne funksjonen. Når det kommer til Linux/Solaris etc, vil ikke conio.h fungere (som rune420 sa).
Om han vil bruke getch(); eller system("pause"); blir opp til steinarlima, for er jo han som lurer på hvordan han kan få til en pause. Eneste jeg sier, er at jeg VET getch(); også funker, hvis det er slik at han bruker Borland C++ Compiler, som du blir bedt om å gjøre i "Teach Yourself C++ in 21 Days"
1. d4
steili's Avatar
Trådstarter
Blir jeg bedt om det? Link? Uansett så står det ingenting om hverken getch() eller system("pause") i "Teach Yourself C++ in 21 Days".. Det var akkurat derfor jeg starta denne tråden, slik at jeg kunne få greie på det..
Edit: BTW, blir neppe noe problem at ikke alle kodene støttes av andre OS, siden jeg er svoren tilhenger av Windows
Opprinnelig postet av rune420

Kode

int main()
{
}
evt. med en return 0; på slutten (dette er strengt tatt ikke nødvendig hvis du har en standard-kompliant kompilator).
Vis hele sitatet...
MÅ du ikke ha med return 0; ?
En int funksjon venter jo å bli returnert en verdi.
Fungerer ihvertfall sånn i CCS compileren jeg bruker.
1. d4
steili's Avatar
Trådstarter
Tror han mener at på gode kompilerer slipper du å returnere noen verdi viss du ikke skal returnere noen.. Dvs at der det skulle stått return 0; , står det ingenting. Ikke helt sikker siden min kompiler ikke støtter dette (Dev C++).
Nei, ifølge ANSI/ISO skal kompilatoren kunne anta return 0; i main().
1. d4
steili's Avatar
Trådstarter
Ja men er det ikke slik at enkelte kompilatorer slipper å motta return 0? At viss den ikke mottar noe, tolker den det som at det ikke er noe å motta? Eller har jeg missforstått helt?

evt. med en return 0; på slutten (dette er strengt tatt ikke nødvendig hvis du har en standard-kompliant kompilator).
Vis hele sitatet...
Og hva mener du med det?
I C++ standarden (som du kan få bestilt her) står det klart og tydelig at selv om man vanligvis må returnere en verdi i int-funksjoner (hvis man ikke vil returnere en verdi, kan man definere den void), så slipper man å måtte gjøre dette i main()-funksjonen (selv om denne er deklarert en int-funksjon). Det er ingenting som hindrer deg i å gjøre det hvis du insisterer, det er bare ikke strengt tatt nødvendig.
I alle andre int-funksjoner derimot, må man alltid returnere en verdi.
▼ ... noen uker senere ... ▼
Opprinnelig postet av steinarlima
Blir jeg bedt om det? Link? Uansett så står det ingenting om hverken getch() eller system("pause") i "Teach Yourself C++ in 21 Days"..
Vis hele sitatet...
Kan stemme det, men la meg sitere noe fra boka som kanskje kan føre deg på spor av det jeg snakker om:
NOTE: If you compile the source code from the operating system's command line, you should type the following:

For the Borland C++ compiler: bcc <filename>

For the Borland C++ for Windows compiler: bcc <filename>

For the Borland Turbo C++ compiler: tc <filename>
Vis hele sitatet...
Vil gjerne peke til noe jeg nettopp postet i en annen tråd på forumet:
http://www.freakforum.nu/forum/showt...622#post329622
▼ ... noen uker senere ... ▼
Jeg så denne tråden, og jeg fikk litt lyst til å prøve meg på dette. Men går det bra med denne: http://www.borland.com/products/down..._cbuilder.html

Den som er "Compiler"...
P4un: Jepp, den holder den, men du blir nødt til å kjøre den gjennom MS-DOS Ledeteksten (cmd), for den har ikke noe grafisk brukergrensesnitt. Ellers er det en veldig god kompilator, har brukt den mye selv.
Jeg tenker at det er lurest for meg å velge en compiler med et grafisk brukergrensesnitt i og med at jeg er helt blank på dette... har Borland en compiler som har et grafisk brukersnitt? Eller noen andre gode compilere, som jeg attpåtil kan få lastet ned noen plass?
1. d4
steili's Avatar
Trådstarter
Jeg bruker Dev C++, forholdsvis ny kompilator som har grafisk brukergrensesnitt, og er enkel å bruke.
steinarlima: Dev-C++ er egentlig bare et grafisk brukergrensesnitt for MingW kompilatoren, som følger med når du laster det ned.

Dev-C++ (m/kompilator) kan du ihvertfall laste ned her: http://prdownloads.sourceforge.net/d...devcpp4980.exe
OrIx: Microsoft Visual C++ 6 er ikke så dårlig, bare du lærer deg å temme den. Med nyeste ServicePack installert følger den jo C++ standarden relativt bra, og i tillegg er den bedre en .NET for spill osv., så vidt jeg har forstått (har aldri prøvd .NET selv, men de anbefaler VC6 i DirectX9 dokumentasjonen, tror jeg).
Med mindre du faktisk har tenkt å benytte .NET i programmene dine (noe du antagelig ikke får behov for med det første), tror jeg VC6 er like greit.

VC6 er egentlig ikke noe spesielt 'Visual' (ihvertfall ikke sammenlignet med f.eks. VB), men med C++ er du faktisk bare nødt til å kode selv.

edit: OrIx-Posten din forsvant? Lar denne stå for det jeg.
Tror jeg ville satsa på Borland C++ Builder

Ikke last ned Visual C++ 6.0 siden denne er svært gamme (1994-1998) Har denne selv og kan ikke si den er så veldig bra mot de nye verktøyene. Uansett så holder jeg meg mest til Delphi siden det passer best til mitt bruk.

Tillater meg å være litt kritiker, de bøkene som heter Teach Yourself C++ in 21 Days og resten av bøkene fra O'relly eller hva de heter er bare møkk!

Send meg en FTP skal jeg laste opp bra bok som heter Expert C programming med Peter van der Linden - Det er C og boka er på 260 sider som er lett å lese, ganske innholdsrik og forklarende. Grei å skrive ut på laser.

Legger ved baksiden (måtte redusere den litt pga filstørrelsen),
http://www.amazon.com/exec/obidos/tg...glance&s=books

Denne boken fikk tydeligvis veldig gode kommentarer...

Noen som har prøvd den eller? Noen som har den og kanskje? takker på forhånd jeg..

Evt denne?
http://www.bokkilden.no/cgi-bin/ncom...geType=15&co=5
Sist endret av P4un; 26. april 2004 kl. 22:14.
Opprinnelig postet av OrIx
Tror jeg ville satsa på Borland C++ Builder

Ikke last ned Visual C++ 6.0 siden denne er svært gamme (1994-1998) Har denne selv og kan ikke si den er så veldig bra mot de nye verktøyene. Uansett så holder jeg meg mest til Delphi siden det passer best til mitt bruk.

Tillater meg å være litt kritiker, de bøkene som heter Teach Yourself C++ in 21 Days og resten av bøkene fra O'relly eller hva de heter er bare møkk!

Send meg en FTP skal jeg laste opp bra bok som heter Expert C programming med Peter van der Linden - Det er C og boka er på 260 sider som er lett å lese, ganske innholdsrik og forklarende. Grei å skrive ut på laser.

Legger ved baksiden (måtte redusere den litt pga filstørrelsen),
Vis hele sitatet...

Borland sin kompilator er relativt dårlig, de lager mye større filer en andre kompilatorer. Visual Studio 6 er en av de bedre, men hvis du er skikkelig inn i programmering kan du gå for Visual Studio .NET 2003 Det er den beste kompilatoren ute nå får c++, men du må configurere den riktig. Hvis du skal ha en ikke grafisk kompiler er MingW både den beste og enkleste.

Laster opp Visual Studio 6 Enterprise Edition og Visual Studio .NET Enterprise Edition 2003(DVD) opp til ZerBox nå, ferdig i morra kveld en gang tror jeg..
Hva er namespace?
fxxed:

Kode

typedef short lite_tall;

namespace mine_variabler_og_navn{
   typedef char lite_tall;
   int min_int;
   typedef char bokstav;
   bokstav min_bokstav;

   namespace andre_ting {
      typedef int tall;   
   }

   andre_ting::tall mitt_tall;


   ::lite_tall dette_er_en_short;
   lite_tall dette_er_en_char;
}

mine_variabler_og_navn::bokstav dette_er_en_char;

mine_variabler_og_navn::min_int = 3;

mine_variabler_og_navn::andre_ting::tall mitt_tall = 3; 
/*legg merke til at mitt_tall og mine_variabler_og_navn::mitt_tall
er to forskjellige variabler/* 

lite_tall dette_er_en_short;
mine_variabler_og_navn::lite_tall dette_er_en_char;
Kort forklart er altså et namespace bare et 'rom' for variabler og egendefinerte typer, for å unngå konflikt med navn i det globale/andre namespaces. Ovenfor har jeg prøvd å illustrere bruk og syntaks ( '::' uten noe foran refererer til det 'globale namespacet', hvis du ikke skjønte det).

Kode

using namespace xxx;
betyr at alle navn i namespacet xxx dumpes til det globale namespacet (evt. det namespacet du skriver det i), hvis du skjønner.
Sist endret av rune420; 27. april 2004 kl. 05:34.
Men tar du denne?

FXD_PROC( wombat::errorcode ) PipeToOld( short valid, long attempt);

Hva betyr det foran PipeToOld? Det ser for meg ut som om PipeToOld returneres i en funksjon som tar en global variabel som parameter?
FXD_PROC er vel en makro, vanskelig å si uten å vite hva denne er...

Søk etter

Kode

#define FXD_PROC
i headerne du bruker, så blir det nok litt klarere.

Skal jeg tippe er det vel noe sånt som

Kode

#define FXD_PROC(i) i callback
Og da vil det over utvide til:

Kode

wombat::errorcode callback PipeToOld(short,long);
Altså en funksjon som returnerer en variabel av typen wombat::errorcode (typen errorcode slik den er definert i namespacet wombat).
Callback (e.l.) angir hvordan parametrene skal sendes til funksjonen (i hvilken rekkefølge de skal dyttes på stacken e.l.). Så lenge du bare kaller den i C/C++ har det egentlig lite å si rent kodemessig, det er mer et slags hjelpeflagg til kompilatoren.
1. d4
steili's Avatar
Trådstarter
Har vært en stund uten c++ programmering nå, siden jeg ble litt lei.. Men programerte en liten kalkulator i går, siden jeg fikk litt lyst. Uansett så lurer jeg på hva dere mener om den. Om det er noen småting som burde skiftes på osv.. Vet jeg ikke skulle brukt unsigned short, men gidder ikke skifte på det..

Kode

http://home.no.net/steinlim/kalkis.cpp
Syns du burde være konsekvent og skrive tal2, slik: tall2, da funker den bedre.
1. d4
steili's Avatar
Trådstarter
Greit.. Trodde bare at man måtte ha forskjellige tall i int main() og i en funksjon, siden det alltid ble vist slik i bok jeg leser. Men ok..

Edit: Fiksa!
Sist endret av steili; 28. april 2004 kl. 19:53.
m0b
m0b's Avatar
DonorAdministrator

Kode

if (matteting > 4)
   cout << "Det var ikke et tall mellom 1 og 4 \n";
En god ide vil være å sette dette i en loop slik at brukeren er nødt til å taste et tall mellom 1 og 4. Slik programmet ditt er nå vil det bare fortsette etter å ha sagt at det ikke er et gyldig tall.

En annen ting du kan gjøre er å sette tall sjekken i en switch istedet for å pøse på med if :)
Du kan jo også legge til flere funksjoner på kalkulatoren. Hvis du vil ha hjelp, finner du en del fine funksjoner her: http://cplusplus.com/ref/cmath/
Når det gjelder andre ting, fikk jeg ikke til å kompilere med en gang (med dev-cpp/mingw), før jeg endret header-filnavn til <iostream> (i stedet for <iostream.h>) samt brukte
using namespace std;
(hvis ikke du har denne linja, bør du skrive std::cout<< og std::cin>> i stedet for cout<< og cin>>)
Dessuten virket det ikke med minus-funksjonen, det er sikkert en funksjon som heter det fra før, fordi det virket når jeg endret navn til "minuse".

Til tross for at det er noe som kan bli bedre, er det en fin start, det er bare å fortsette å øve.
1. d4
steili's Avatar
Trådstarter
Opprinnelig postet av |d13m0b

Kode

if (matteting > 4)
   cout << "Det var ikke et tall mellom 1 og 4 \n";
En god ide vil være å sette dette i en loop slik at brukeren er nødt til å taste et tall mellom 1 og 4. Slik programmet ditt er nå vil det bare fortsette etter å ha sagt at det ikke er et gyldig tall.

En annen ting du kan gjøre er å sette tall sjekken i en switch istedet for å pøse på med if
Vis hele sitatet...
Var det jeg hadde tenkt når jeg laga den, men har ikke lært meg noen av disse funksjonene ennå, så jeg lot det være. Du har vel ikke lyst å forklare meg litt?
Opprinnelig postet av MatesDu kan jo også legge til flere funksjoner på kalkulatoren. Hvis du vil ha hjelp, finner du en del fine funksjoner her: http://cplusplus.com/ref/cmath/
Når det gjelder andre ting, fikk jeg ikke til å kompilere med en gang (med dev-cpp/mingw), før jeg endret header-filnavn til <iostream> (i stedet for <iostream.h> ) samt brukte
using namespace std;
(hvis ikke du har denne linja, bør du skrive std::cout<< og std::cin>> i stedet for cout<< og cin>> )
Dessuten virket det ikke med minus-funksjonen, det er sikkert en funksjon som heter det fra før, fordi det virket når jeg endret navn til "minuse".

Til tross for at det er noe som kan bli bedre, er det en fin start, det er bare å fortsette å øve.
Vis hele sitatet...
Hmm.. Alt dette fungerer i Dev C++ som jeg bruker, men det fungerte like bra med [using namespace std;], så jeg kan like godt bruke det. Det med minus fungerte også i Dev C++, men igjen så gjør det ikke noe om jeg forandrer det.

Takk for svar, skal se om jeg får fortsette litt på kalkulatoren..

Edit: Fjerna unsigned short til fordel for double. Er ikke det mest riktig til en kalkulator? Skal uppe den nå.

Edit2: Lurer på en ting.. Har egentlig ingen ting med kalkulatoren å gjøre, men hvordan kan man få programmet til å printe ut en tekstfil, med variabler osv? Husker jeg brukt Append og slikt i QBasic, men har ikke funnet noen måter i C++..
Sist endret av steili; 29. april 2004 kl. 20:58.
Det kan være at det fungerer i Dev-c++, bare at jeg ikke fikk det til. Jeg har imidlertid sett at using namespace std; brukes mange plasser, så jeg regner med at det er noe i det. Måten jeg printer ut til fil på er denne:

Kode

#include <fstream>
#flere includes
using namespace std;

int main(){
ofstream utfil ("navnpaafil.txt") ;
//
doSomeStuff();
//
utfil<<"tekststreng"<<endl;
utfil<<variabel<<endl;
return 0;
}
Filnavnet kan ha hvilken som helst endelse. "utfil<<" skriver til fil, som "cout<<" skriver til skjermen.

For å skrive fra fil til programmet, bruker du:

ifstream innfil ("navnpaafil.in");
innfil>>variabel;

dette fungerer omtrent som cin>>

Forøvrig mener jeg det er fornuftig med double til kalkulator
Opprinnelig postet av |d13m0b
[b]

Kode

if (matteting > 4)
   cout << "Det var ikke et tall mellom 1 og 4 \n";
En god ide vil være å sette dette i en loop slik at brukeren er nødt til å taste et tall mellom 1 og 4. Slik programmet ditt er nå vil det bare fortsette etter å ha sagt at det ikke er et gyldig tall.
Vis hele sitatet...
Prøv med:

Kode

#include <iostream>

// Ta imot generell input
template <class T>
T get_input()
{
    T input;
    cin >> input;
    return input;
}

// Ta imot int-input
template <>
int get_input<int>()
{
    std::string input;
    std::cin >> input;
    int x = std::atoi(input.c_str()); // gjør om char til 0
    return x;
}

int main()
{

    using std::cout;
    using std::cin;
    using std::system;

    int tall;
    
    system("cls"); // Clear Screen: windows = "cls", linux = "clear"

    for (;;) // evig loop
    {
        cout << "Skriv inn et tall mellom 1 og 4: ";
        tall = get_input<int>();

        if (tall > 1 && tall < 4)
            break; // her avslutter den for-loopen, dersom verdien den spør etter er gitt.
    Hvis ikke, blir det som kommer etter break; printet til skjermen.

        system("cls"); // Clear Screen: windows = "cls", linux = "clear"
        cout << "FEIL: Det var ikke et tall mellom 1 og 4 \n\n";
    }
}
Her slang jeg med noen ekstra funksjoner samt. kommentarer som kan komme til nytte :)

Edit: deaktiverte smileys
Sist endret av HaZnO; 30. april 2004 kl. 00:10.
Opprinnelig postet av rune420 Med nyeste ServicePack installert følger den jo C++ standarden relativt bra,
Vis hele sitatet...
Den gjorde faktisk det. Har brukt Visual Studio 6 uten SP, men la inn SP6 nå og det kom seg. Særlig i VB ble det økt stabilitet.
HaZnO: Du er ond. Trenger vel strengt tatt ikke begynne å vikle inn templates og slike 'vanskelige' ting, når det kan gjøres mye enklere. Med tanke på at steinarlima er ganske grønn mener jeg.
Opprinnelig postet av HaZnO:
if (tall > 1 && tall < 4)

Det skal vel være >= og <=? Slik som det er nå, blir uttrykket sant bare for tall==2 tall==3
Mates: jeg skrev det først, men etter en nærmere kikk, så jeg at eksempelet var:

Kode

if (matteting > 4)
   cout << "Det var ikke et tall mellom 1 og 4 \n";
altså MELLOM 1 og 4, dvs 2 og 3.
Derfor if (tall > 1 && tall < 4)
1. d4
steili's Avatar
Trådstarter
Hmm.. Har et problem.. Har fiksa noen loop funksjoner nå, men problemet er at programmet går inn i en loop viss jeg skriver en bokstav i stedet for et tall når jeg skal taste inn de talla kalkulatoren skal regne ut. Noen måter å fikse dette på?

Kode

http://home.no.net/steinlim/kalkis.cpp
http://home.no.net/steinlim/kalkis.exe
Sist endret av steili; 5. mai 2004 kl. 16:38.