Toon posts:

[c++] Variable geven troep terug.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb scriptje waar ik variable benoem.
bijvoorbeeld "int x=1;" en als ik dan
x wil laten zien met "cout<<x<<endl;" dan
geeft hij bijv. "%#%$@$" terug.
Dit heb ik met een string en een 3 intergers.
Ik weet dat dit met de memory te maken heeft.
Maar hoe kan ik dit nou behelpen.

TNHX

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Zoek een standaard C++ Hello World programma en compileer die eens, werkt dat?

Verwijderd

Topicstarter
Normaal werkt dit ook wel.....
maar ik heb nu hier vier variable die
iets terug geven uit een verkeerd stukje geheugen.
Ik maak gebruik van string,int,arrays,pointers

Kan hoogstens van die pointers komen.
Ik zal men stukje code zo posten......

Verwijderd

Op zondag 14 juli 2002 21:30 schreef tasker het volgende:
Kan hoogstens van die pointers komen.
Ik zal men stukje code zo posten......
Zeer waarschijnlijk zit je met een array(pointer) in de geheugenruimte van je andere variabelen te rommelen. Blijf je netjes binnen je array grenzen, doe je geen rare dingen met pointers?

Verwijderd

Topicstarter
Zo hier is men source.
Hij is een beetje onoverzichtelijk geworden bij het
pasten in dit forum::::


#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<stdlib.h>
#include<fstream.h>

double screen(char fquestion[50],char *fshowawnser1[50],char *fshowawnser2[50],char *fshowawnser3[50],
char *fshowawnser4[50],char *fshowawnser5[50],char *fwronggroup1[5],char *fwronggroup2[5],char frunde[20],
int fscore,int fscoregroup1,int fscoregroup2,char fquestion2[50],
int score1,int score2,int score3,int score4,int score5);

int main() {

char question[50],*showawnser1[50],*showawnser2[50],*showawnser3[50],*wronggroup1[5];
char *showawnser4[50],*showawnser5[50],awnser1[50],awnser2[50],awnser3[50],awnser4[50],awnser5[50];
char *wronggroup2[5],runde[20],question2[50];
char buffer1[3],buffer2[3],buffer3[3],buffer4[3],buffer5[3];
int score,scoregroup1,scoregroup2,score1,score2,score3,score4,score5,x;

clrscr();
cout<<"BEGIN"<<endl;
cin.get();

clrscr();
showawnser1[50]="..............................................";
showawnser2[50]="..............................................";
showawnser3[50]="..............................................";
showawnser4[50]="..............................................";
showawnser5[50]="..............................................";
wronggroup1[5]="";
wronggroup2[5]="xx";
scoregroup1=0;
scoregroup2=0;
score=0;

ifstream file("/runde1.txt");

x=0;
while (! file.eof()) {
x=x+1;
if (x==1) {
file.getline(runde,256);
} if (x==2) {
file.getline(question,256);
} if (x==3) {
file.getline(question2,256);
} if (x==4) {
file.getline(awnser1,256);
} if (x==5) {
file.getline(buffer1,256);
} if (x==6) {
file.getline(awnser2,256);
} if (x==7) {
file.getline(buffer2,256);
} if (x==8) {
file.getline(awnser3,256);
} if (x==9) {
file.getline(buffer2,256);
} if (x==10) {
file.getline(awnser4,256);
} if (x==11) {
file.getline(buffer4,256);
} if (x==12) {
file.getline(awnser5,256);
} if (x==13) {
file.getline(buffer5,256);
}
}

score1=atoi(buffer1);
score2=atoi(buffer2);
score3=atoi(buffer3);
score4=atoi(buffer4);
score5=atoi(buffer5);

screen(question,showawnser1,showawnser2,showawnser3,showawnser4,showawnser5,
wronggroup1,wronggroup2,runde,score,scoregroup1,scoregroup2,question2,
score1,score2,score3,score4,score5);
return 0;
}

double screen(char fquestion[50],char *fshowawnser1[50],char *fshowawnser2[50],char *fshowawnser3[50],
char *fshowawnser4[50],char *fshowawnser5[50],char *fwronggroup1[5],char *fwronggroup2[5],char frunde[20],
int fscore,int fscoregroup1,int fscoregroup2,char fquestion2[50],
int score1,int score2,int score3,int score4,int score5) {
clrscr();
cout<<frunde<<endl;
cout<<endl;
cout<<"Frage :"<<endl;
cout<<endl;
cout<<fquestion<<endl;
cout<<fquestion2<<endl;
cout<<endl;
cout<<"1. "<<fshowawnser1[50]<<score1<<endl;
cout<<"2. "<<fshowawnser2[50]<<score2<<endl;
cout<<"3. "<<fshowawnser3[50]<<score3<<endl;
cout<<"4. "<<fshowawnser4[50]<<score4<<endl;
cout<<"5. "<<fshowawnser5[50]<<score5<<endl;
cout<<endl;
cout<<endl;
cout<<fscoregroup1<<" "<<fscore<<" "<<fscoregroup2<<endl;
cout<<fwronggroup1[5]<<" "<<fwronggroup2[5]<<endl;
cin.get();
return 0;
}

::: Dit lomt er als uitput :::

http://www.bozelie.nl/dospl.jpg

Verwijderd

Op zondag 14 juli 2002 21:41 schreef tasker het volgende:
Zo hier is men source :::
Pff, ff lezen hoor, momentje :)
Goed, klaar met lezen. Nou ben ik geen C++ expert (lang leve C!) maar dit mag volgens mij toch echt niet!:
code:
1
showawnser1[50]="..............................................";

Je kan een string niet zomaar in een array stoppen, dat moet met strcpy of memcpy ofzo. Verder moet die [50] er sowieso niet achter, nu refereer je naar het 51e (C begint te tellen bij 0!) element en daar probeer je die string in te stoppen. Oftewel, dat gaat allemaal niet werken. Zoek maar eens in je C(++) boek het stuk over strings, pointers, arrays en hun relatie op.
Oh en 'awnser' spel je als 'answer' :) NOFI.
Succes

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Kan je niet beter std::string gebruiken in plaats van char pointers? Zit je ook niet met allocatie/deallocatie.

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
Dit staat in de txt file die hij inleest..

http://www.bozelie.nl/runde1.txt

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zondag 14 juli 2002 21:49 schreef tasker het volgende:
Dit staat in de txt file die hij inleest..

http://www.bozelie.nl/runde1.txt
404 error?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Op zondag 14 juli 2002 21:49 schreef tasker het volgende:
Dit staat in de txt file die hij inleest..

http://www.bozelie.nl/runde1.txt
404'tje :)

Verwijderd

Topicstarter
Nu niet meer.... [404]

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Ik zou allereerst de stl heel erg gaan gebruiken, dus std::string voor alle char pointers, voor het lezen van de file de ifstream class ... en je hebt daar dat test(je) met al die x'en, zet dat in een switch statement (of maak er op z'n minst else if van bij alle anderen, zo test ie elke keer x zo'n 13 keer voor elke regel)

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
Ik zal het dan maar ff veranderen....
Hopelijk werkt het dan wel...

Verwijderd

Op zondag 14 juli 2002 21:43 schreef sp0ck3y het volgende:
maar dit mag volgens mij toch echt niet!:
code:
1
showawnser1[50]="..............................................";

Je kan een string niet zomaar in een array stoppen, dat moet met strcpy of memcpy ofzo.
uhh.. geen probleem hoor. Als jij wil dat showawnser1[50] naar die string verwijst zet je dat zo neer. Je moet er alleen rekening mee houden dat je het niet vrij gaat geven, dan gaat het fout. (Of het verstandig is, is de vraag... ik heb de niet de moeite genomen de hele (slecht leesbare) source door te spitten)

  • Tim
  • Registratie: Mei 2000
  • Laatst online: 23-07 15:18

Tim

Op maandag 15 juli 2002 01:05 schreef unteraarsch het volgende:

[..]

uhh.. geen probleem hoor. Als jij wil dat showawnser1[50] naar die string verwijst zet je dat zo neer. Je moet er alleen rekening mee houden dat je het niet vrij gaat geven, dan gaat het fout. (Of het verstandig is, is de vraag... ik heb de niet de moeite genomen de hele (slecht leesbare) source door te spitten)
wel een probleem, showawnser Staat gedeclareerd alS een pointer (ja, me S iS kapot), Staat nergens naar verwezen en word dan ook nog een geintaliSeerd met een char van 47 tekenS..

wonderbaarlijk genoeg dat het programma niet eenS craShed.. je krijgt ook een mooi error in NT

Verwijderd

onzin. Een string die in de source aangegeven word retourneerd een pointer naar die string. Die pointer verwijst naar het datasegment van het programma. Je kan daar gewoon een pointer naar leggen.
dus:
code:
1
  printf("hallo dit is een string\n");

is hetzelfde als:
code:
1
2
3
   char *str;
  str = "hallo dit is een string\n";
  printf(str);

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:13
Op maandag 15 juli 2002 01:19 schreef Timpie het volgende:

[..]

wel een probleem, showawnser Staat gedeclareerd alS een pointer (ja, me S iS kapot), Staat nergens naar verwezen en word dan ook nog een geintaliSeerd met een char van 47 tekenS..
Volgens mij ben jij in de war met het declareren van een char array, en vervolgens deze toezijzen aan een char pointer:
code:
1
2
3
char string_buffer[200];

string_buffer = "I'm broken";

Alhoewel dat een compiler error geeft...

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Op zondag 14 juli 2002 21:41 schreef tasker het volgende:
Zo hier is men source.
[SNIPs]
char *showawnser1[50];
showawnser1[50]="..............................................";
Wat denk je dat het type van showawnser1 is?

Niet dus, het is een array van 50 pointers, showawnser1[0] tot showawnser1[49]. Elk van die 50 pointers zou je kunnen
initialiseren met "....", maar wat jij probeert is om de 51'ste pointer te laten wijzen naar die string.


De oplossing is om C++ te schrijven ipv C. Gebruik std::string, en eventueel std::vector<std::string> als je een verzameling string nodig hebt.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Op maandag 15 juli 2002 09:16 schreef unteraarsch het volgende:
onzin. [snip]
code:
1
  printf("hallo dit is een string\n");

is hetzelfde als:
code:
1
2
3
   char *str;
  str = "hallo dit is een string\n";
  printf(str);
Behalve dat het type van een "gequote string" geen char* maar char const* is; je mag'm niet wijzigen. Dus je programma hoort een warning te genereren (als je warning nivo niet te laag staat)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • igmar
  • Registratie: April 2000
  • Laatst online: 23-08 16:57

igmar

ISO20022

Op maandag 15 juli 2002 09:16 schreef unteraarsch het volgende:
onzin. Een string die in de source aangegeven word retourneerd een pointer naar die string. Die pointer verwijst naar het datasegment van het programma. Je kan daar gewoon een pointer naar leggen.
dus:
code:
1
  printf("hallo dit is een string\n");

is hetzelfde als:
code:
1
2
3
   char *str;
  str = "hallo dit is een string\n";
  printf(str);
Klopt, alleen het is wel een const pointer. MAW : Je mag de inhoud NIET veranderen, aangezien het in het code block zelf zit.

maw : Als je met de *str gaat lopen kloten ben je een core file rijker , of krijg je dr Watson op de koffie :)

Verwijderd

Topicstarter
Heeft iemand een voorbeeldje met std::string....
Alleen hoe je dan een string declareerd en uitleest.
Mag natuurlijk ook een howto zijn...

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op maandag 15 juli 2002 18:55 schreef tasker het volgende:
Heeft iemand een voorbeeldje met std::string....
Alleen hoe je dan een string declareerd en uitleest.
Mag natuurlijk ook een howto zijn...
std::string blaat = "Hello ";
std::string blaat2 = "World";
std::cout << blaat + blaat2 << std::endl;

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
Dit had ik ook al probeerd maar geeft alleen errors...
Ik heb de header <string.h> gebruikt...

Fout melding is :

Type qualifier must be a struct or class name.

En hoe gebruik je STD::string in een functie.
Net zoals char en int...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:57

.oisyn

Moderator Devschuur®

Demotivational Speaker

je moet de header <string> hebben :)
code:
1
2
3
#include <string>

std::string blaat = "blaat";

en ja, die gebruik je min of meer net zoals char en int (dus je kunt bijvoorbeeld 2 strings bij elkaar 'optellen')

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Header <string> kent hij niet....
Wat nu....

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op maandag 15 juli 2002 19:53 schreef tasker het volgende:
Header <string> kent hij niet....
Wat nu....
hummm, vaag... volgens mij staat de definitie ook in string.h maar dan zonder de std namespace, dan krijg je dus dit: string blaat = "blaat"; etc. Maar weet ik eigenlijk niet zeker...

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

tasker>> ik heb je hier al verteld dat BCPP 3.0 nu niet bepaald de nieuwste C++ compiler is. Als je niet percé een stokoude compiler die nog niet de helft van de taalstandaard ondersteunt moet gebruiken (voor school of werk), raad ik je dringend aan een recentere compiler te downloaden, er is voldoende (gratis) aanbod...

Verwijderd

Topicstarter
Kan je dan deze andere compiler in die editor integreren...

Verwijderd

Ik weet niet hoe dat bij de IDE van Borland zit, maar ook IDEs zijn er voldoende beschikbaar. Ik programmeer zo goed als nooit voor windows/dos, dus ik kan je niet adviseren welke je precies nemen moet.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:13
Zelfs toen TC3 uitkwam hadden ze al helpfiles uitgevonden [ALT]+[F1]

Alles wat je daar over string classes tegenkomt zijn de classes uit de bc class libs.

Maw, TC heeft geen std::string (alleen de syntax zal ie al niet snappen omdat het een pre-standaard compiler is ), en dus ook helemaal geen stl libs.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1