Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

- Den ene if-setningen slutter ikke med samme antall tabs som den begynte med. Hvis jeg manuelt fjerner to stk, slik at det blir korrekt, fjerner Dev-C++ automatisk den siste innrykket. Kan dette løses på en annen måte enn å skru av all fancy funksjonalitet?

- Når indeterer man?

7936542[/snapback]

 

Har hatt samme "problemet" som deg i stort sett alle editorer/ide jeg har prøvd, derfor står jeg bi min gode gamle emacs, som er den eneste som fungerer som jeg vil til dags dato iallefall. Automatisk indentering er veldig kjekt når de fungerer.

 

Jeg liker å formatere koden min slik som her under, da er det ikke forskjell på krølleparantesene i funksjoner og løkke/kondisjonellesetninger. Men det er stort sett to leirer der, ingenting feil i koden du postet, annet enn indenteringa da.

 

Indenteringa er jo bare der for å hjelpe deg! (i python er den påkrevd! og brukes i stedet for krølleparanteser)

 

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void init() { // <- obs!
  ifstream Maps;
  Maps.open ( "tracks" );
   
  if ( Maps.is_open() ) {
     // Do something here ..
  } else {
     cout << "Unable to open file!";
  }
  Maps.close();
}

int main() {
  init();
  cout << "Welcome to Snake!" << endl;
  system("pause");
}

Lenke til kommentar
Videoannonse
Annonse

Jeg har et lite problem med pekere...

 

Jeg har en struct som er definert slik:

 

typedef struct {

void *data;

int dataLength;

int width;

int height;

int pixelSize;

int pitch;

int roiX0;

int roiX1;

DICLibPixelType pixelType;

} TDICLibImageInformation;

 

 

 

Spørsmålet mitt er sannsynligvis banalt, men hvordan får jeg fatt i ->data?

Lenke til kommentar
Jeg har et lite problem med pekere...

 

Jeg har en struct som er definert slik:

 

typedef struct {

        void *data;

        int dataLength;

        int width;

        int height;

        int pixelSize;

        int pitch;

        int roiX0;

        int roiX1;                                                   

        DICLibPixelType pixelType;

} TDICLibImageInformation;

 

 

 

Spørsmålet mitt er sannsynligvis banalt, men hvordan får jeg fatt i ->data?

8007881[/snapback]

 

litt usikker på hva du mener med få fatt i, men hjelper dette?

TDICLibImageInformation test;
test.data = new char;

 

eller dette?

 

TDICLibImageInformation teststruktur;
test.data = new char;
char bokstav = *(char*)test.data;

Lenke til kommentar

data innholder verdier/bilde fra en gammadetektor. Størrelsen på bildet er 88*88. Jeg vil legge data over i et bilde (av type CImg) for å gjøre litt prossessering og lagre det til disk.

 

// Bruker CImg for bildehåndtering
CImg<int> bilde(88,88,0,0);
// Går gjennom data og skriver til bildet
// La oss si vi har en struct som heter structen
// Trenger en peker til starten av data
int *dataPtr = (int *) structen->data;      // Er dette riktig?

for (int x = 0; x < structen->width; x++)
{
  for (int y = 0; y < structen->heigth; h++)
  {
      bilde(x,y,0,0) = basePtr + (x + y*structen->width); // Er dette riktig?
  }
}
// Kan så lagre bildet
bilde.save_tiff("hoho.tif");

 

Ble dette riktig? Gammadetektoren vil ikke snakke med meg for tiden, så jeg har ikke hatt sjangs til å teste det ut enda.

Endret av Mr Burns
Lenke til kommentar
  • 2 uker senere...

Har begynt med C++ på skolen, hvor vi følger en bok fra 1997. Den bruker en eldre versjon av Visual C++ som compiler, men jeg liker Dev-C++ bedre. Problemet kommer bare når jeg skal bruke if ((condition1)&&(condition2))

Den samme gjelder || (or). Er det noe annet som brukes i Dev-C++, evnt. en annen library-file jeg må bruke? Nå bruker jeg iostream.h.

Lenke til kommentar
  • 1 måned senere...
Hvordan starter jeg et program etter jeg har skrevet det?

 

(Det er ikke mitt)

 

//  C++ program

 

#include <iostream>

using namespace std;

 

int main ()

{

  cout << "Hello World!";

  return 0;

}

 

EDIT: Har så vidt hørt om programmering før i dag  :thumbdown:

8461200[/snapback]

 

Les punkt 5

Ofte stilte spørsmål (med tilhørende svar) og gjerne mer.

 

Du trenger en kompilator!!

Lenke til kommentar

Okey, så skal lage et enkelt program som lagrer navnet mitt til en tekst-fil på dataen men har et lite problem.

 

#include <iostream>
#include "conio.h"
#include <string>
#include <fstream>

using namespace std;

//main

int main()
{
   int lagre();
   string navn;
   
   cout << "Velkommen\n\nHva heter du?: ";
   cin >> navn;
   
   lagre();
   
   getch();
   return 0;
}

//funksjon for å lagre data

int lagre()
{     
   string FileName;
   
   ofstream save(FileName, ios::out);
   save << navn;

   return 0;
}

 

Problemet er at i funksjonen for å lagre data til en fil så har jeg strengen navn, men programmet finner den ikke i funksjonen. Noen som vet hvordan jeg kan få funsjonen til å finne ut hva som står i navn for så å printe det ut til en fil?

Endret av Smeagoldfish
Lenke til kommentar
Okey, så skal lage et enkelt program som lagrer navnet mitt til en tekst-fil på dataen men har et lite problem.

 

#include <iostream>
#include "conio.h"
#include <string>
#include <fstream>

using namespace std;

//main

int main()
{
   int lagre();
   string navn;
   
   cout << "Velkommen\n\nHva heter du?: ";
   cin >> navn;
   
   lagre();
   
   getch();
   return 0;
}

//funksjon for å lagre data

int lagre()
{     
   string FileName;
   
   ofstream save(FileName, ios::out);
   save << navn;

   return 0;
}

 

Problemet er at i funksjonen for å lagre data til en fil så har jeg strengen navn[\I], men programmet finner den ikke i funksjonen. Noen som vet hvordan jeg kan få funsjonen til å finne ut hva som står i navn for så å printe det ut til en fil?

8482874[/snapback]

 

C/C++ har flere "områder" som variablene kan eksistere name befinner seg i funksjons området til main og av den grunn vet ikke lagre om name områder kan sees som en tre struktur der man bare kan se variabler som er erklært i samme området eller området over.

 

Global (Alle kan se hva som er erklært her) (funksjonene main og lager er globale)

|

|->main (erklærer name)

|->main->while loop(kan f. eks. se name)

|->lager(kan ikke se name)

 

Håper det hjalp deg med å forstå det.

 

Det finnes flere løsninger på problemet.

Den enklest (men ikke å ambefalle) er å gjøre name en global varaibel

Klikk for å se/fjerne innholdet nedenfor
#include <iostream>
#include "conio.h"
#include <string>
#include <fstream>

using namespace std;

string navn;//name er nå en global varaibel og kan sees av alle

//main

int main()
{
   int lagre();

   
   cout << "Velkommen\n\nHva heter du?: ";
   cin >> navn;
   
   lagre();
   
   getch();
   return 0;
}

//funksjon for å lagre data

int lagre()
{     
   string FileName;
   
   ofstream save(FileName, ios::out);
   save << navn;

   return 0;
}

 

Ellers så kan du gjøre det på den mer ordentlige måten og sende name som en parameter til funksjonen.

 

Klikk for å se/fjerne innholdet nedenfor
#include <iostream>
#include "conio.h"
#include <string>
#include <fstream>

using namespace std;

string navn;

//main

int lagre(string navn)//denne skal ikke være inne i main!!

int main()
{


   
   cout << "Velkommen\n\nHva heter du?: ";
   cin >> navn;
   
   lagre(navn);
   
   getch();
   return 0;
}

//funksjon for å lagre data

int lagre(string navn)//husk å forandre den i headeren
{     
   string FileName;
   
   ofstream save(FileName, ios::out);
   save << navn;

   return 0;
}

Lenke til kommentar

Unnskyld meg, men programmering er litt vanskelig å forstå så, kan noen programmere et tre, eller en rød boks? Hva som helst egentlig, hvis det går ann. Jeg har kompilator

 

#include <iostream>
#include <string>
                                                         
//Her kunne jeg bare ha brukt "using namespace std;" men jeg tar det rett fra boka jeg..;)  

using std::cin;        using std::endl;
using std::cout;      using std::string;

int main()
{
cout << "Skriv inn navnet ditt: ";

string name;
cin >> name;

const string greeting = "Heisann, " + name + "!";
const int pad = 1;
const int rows = pad * 2 + 3;
const string::size_type cols = greeting.size() + pad * 2 + 2;
cout << endl;

for (int r = 0; r !=rows; ++r)  {
string::size_type c = 0;

while (c != cols) {
if (r == pad + 1 && c == pad + 1) {
cout << greeting;
c += greeting.size();
}else{

if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
cout << "*";

else 

cout << " ";
++c;

}
} 
cout << endl;
}
return 0;
}

Ser et tre sånn ca slik ut? Eller er det hundre ganger mer tekst?

Lenke til kommentar

Eit tre?

Det er vel berre til å printe ut nokre linjer med "*"'ar nedgjennom! :)

 

Forresten, eg har eit nybyrjarproblem.

Eg prøver å lage eit program som genererer ein triangel etter input.

Her er koden:

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

int main () {
   int rows;
   cout << "Venlegst angi antalet linjer trekanten skal gå over: ";
   cin >> rows;
   int r;
   while(r =! rows) {
       string stars(r, '*');
       cout << stars << endl;
       ++r;
       }
       system("PAUSE");
   return 0;
}

 

Det skjer ingenting, outputtet er slik:

 

Venlegst angi antalet linjer trekanten skal gÕ over: 23

Trykk en tast for å fortsette...

 

Eg må nok ha gjort ein feil inni der, sidan det ikkje virkar. Eg har tenkt slik:

Så lenge som r ikkje er lik det som vi tasta inn, skal vi printe ut verdien av r i "*"ar.

 

Det burde vel virke?

Lenke til kommentar
Eit tre?

Det er vel berre til å printe ut nokre linjer med "*"'ar nedgjennom! :)

 

Forresten, eg har eit nybyrjarproblem.

Eg prøver å lage eit program som genererer ein triangel etter input.

Her er koden:

...

variablen int r; er ikke initialisert med en verdi.

Endret av hishadow
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...