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.
  9 6462
Heisann

I flysimulator verden holder vi på å utvikle en plugin til et radarkontrollprogram.

Vi sliter med at noen data resettes når den ikke skal settes.

Han som skriver koden har følgende setning:

Noen som kan se om dette er riktig?
Hvis noen av de følgende vilkårene er sanne, skal det ikke settes en "squawkkode" for det gitte flyet.

Kode

if (mycallsign.find("OBS") != string::npos ||																// Is Observer
	!bSqkCode || 																							// Not assigning squawks
	ControllerMyself().GetFacility() == 0 ||																// If OBS facility
	Aircraft.GetSimulated() ||																				// If outside of radar range (NOT WORKING??)
	!Aircraft.IsValid() ||																					// If the aircraft object is valid
	!position.IsValid() ||																					// If the radar position is valid
	(string(Aircraft.GetTrackingControllerCallsign()) != "" && !Aircraft.GetTrackingControllerIsMe()) ||	// If being tracked and not by self
	(GS > 60 && !Aircraft.GetTrackingControllerIsMe())														// If GS > 60 and not tracked by me
	)
	return;
Jeg er ikke så stø på programmering selv. Så henvender meg til dere for å få litt friske øyne på saken

Hmm, synes den ble fryktelig rotete den "CODE" snippeten...

Her er et bilde av slik det skal se ut

http://i164.photobucket.com/albums/u21/Stingray89/code.jpg
Sist endret av Blomsen Sr.; 30. april 2017 kl. 19:12. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Bea
Big Bad Wolf
Bea's Avatar
Vil anbefale deg å starte med å bruke en debugger for å step by step gå gjennom koden. Da vil du enkelt se hvilke(n) deler av koden som gjør at det feiler.
Ved å bare se på den kodesnutten du har lagt ut her vil jeg tro det er ganske umulig å se hva som er "feil", da må vi ihvertfall få en bedre beskrivelse av hva som er feil etc.
Akkurat denne kodebiten sier hvor vidt programmet skal gi et fly på radaren en transponderkode. Eller rettere sagt, ikke skal gi en kode.

Og han som skriver koden er litt egen i forhold til hva han vil vise oss grunnet copyrights osv. Men akkurat nå er det akkurat denne if-setningen som er problemet.

Spørsmålet er om hvor vidt logikken i setningen går opp

For programmet feiler ikke. Men det blir gitt slike transponderkoder når det ikke skal gies koder
m0b
m0b's Avatar
DonorAdministrator
Syntaksen er korrekt, men if-statementet utfører ingenting arbeid hvis den er true. Hvis han skal være egen med copyright, så får han heller plages.
Sist endret av m0b; 30. april 2017 kl. 20:09.
Sitat av Blomsen Sr. Vis innlegg
Akkurat denne kodebiten sier hvor vidt programmet skal gi et fly på radaren en transponderkode. Eller rettere sagt, ikke skal gi en kode.

Og han som skriver koden er litt egen i forhold til hva han vil vise oss grunnet copyrights osv. Men akkurat nå er det akkurat denne if-setningen som er problemet.

Spørsmålet er om hvor vidt logikken i setningen går opp

For programmet feiler ikke. Men det blir gitt slike transponderkoder når det ikke skal gies koder
Vis hele sitatet...
Som @Bea sier ovenfor, så er det ganske umulig for oss å feilsøke denne koden uten mer informasjon. Som du sier selv så er du ikke så stø på programmeringen, og det tar vi hensyn til, så her skal du få en lite hurtigkurs i det å spørre etter hjelp på forumer.

Første og viktigste å få med i posten er hvilket språk jobber du med? I dette tilfelle så er det liten tvil om at det kan være noe annet enn C++, mens i andre tilfeller så kan syntaksene se veldig like ut i mange forskjellige språk, og da spesielt i små kodesnuter som denne.

Beste er jo å poste hele koden slik at man kan få en oversiktsbilde over hvordan ting henger sammen og fungerer. Ønsker man der i mot ikke å poste hele koden, så må man hvertfall legge ved nok informasjon til å kunne forstå den delen av koden som er blitt postet.

La meg ta et eksempel, se på følgende kodesnut:

Kode

mycallsign.find("OBS") != string::npos
Vi kan anslå at «mycallsign» er av datatypen std::string, men vi kan ikke vite dette med sikkerhet bare ved å se på koden du har postet, dette kan gjerne være en objekt av typen LangTekst (), og LangTekst::find() er en metode for å søke etter ord i teksten som returnere std::string::npos ved ikke funn, på samme måte som std::string::find(). Du må gi oss i det minste prototyper for de forskjellige variablene, metodene og objektene for at det skal gi noe mening.

Et annet vesentlig spørsmål er jo hva står under «return»? Er det slutten på funksjonen/methoden, i såfall hvordan skiller dere mellom true og false? Eller står det annen kode under if-setningen?
Hehe, joda ser den med egenheten :P

Det han sier er ordrett: "Can someone please check the logic of the conditions below? If any of the following conditions are met, a squawk code will NOT be set."

Så da tolker jeg det dit at koden er riktig

Så da spørs det om problemet med at det allikevell blir satt en squawk kode ligger et annet sted.
Dette er som tidligere nevnt bare en plugin, så kan jo være noe med serveren også :/
nso
popålol
nso's Avatar
Administrator
Er kommentarene for følgende eller forrige linje? Det ser ut til å være godt blandet...

Umulig å vite siden vi ikke vet hva de ulike metodene som kalles skal returnere.

Forøvrig...

Kode

!Aircraft.IsValid() || // If the aircraft object is valid
Her er kommentaren og kode selvmotsidende. I pseudokode står det "if aircraft isvalid == false" mens kommentaten indikerer at det letes etter 'true'.

Koden er tilnærmet uleselig for utenforstående, så dette er et veldig godt eksempel på unmaintainable code og hinter om at denne utvikleren nok trenger mer erfaring.
Sist endret av nso; 1. mai 2017 kl. 01:33.
Det kan jo godt hende at nso har funnet feilen allerede hvis man baserer seg på at kommentarene til koden er korrekt. Da blir det nok riktig å gjerne ! foran begge setningene:

Kode

	!Aircraft.IsValid() ||																					// If the aircraft object is valid
	!position.IsValid() ||																					// If the radar position is valid
Sitat av nso Vis innlegg
Er kommentarene for følgende eller forrige linje? Det ser ut til å være godt blandet...

Umulig å vite siden vi ikke vet hva de ulike metodene som kalles skal returnere.

Forøvrig...

Kode

!Aircraft.IsValid() || // If the aircraft object is valid
Her er kommentaren og kode selvmotsidende. I pseudokode står det "if aircraft isvalid == false" mens kommentaten indikerer at det letes etter 'true'.

Koden er tilnærmet uleselig for utenforstående, så dette er et veldig godt eksempel på unmaintainable code og hinter om at denne utvikleren nok trenger mer erfaring.
Vis hele sitatet...
Kommentarene hører til forrige linje ja. Det ser man ved at neste linjenummer ikke starter før neste linje

1. blablablba
//kommentar
2. blabla

Skjønner ikke hvorfor det kommer slik, blir riktig når jeg klipper det inn i visual studio :P Men feil i denne kodevisningen.


De forskjellige datatypene ligger i dev-kitet til radarklienten så det er de han leter etter.

i devkit har vi eksempelvis "Aircraft.IsValid". Det vi er ute etter med denne funksjonen er å finne om ett target ikke er valid. Derav "!".

Som nevnt så hvis setningen returnerer TRUE så skal det ikke settes en squawkkode Utvikler var i tvil om hvor vidt det var logikken som feilet som gjør at vi allikevell får koder ut i programmet vårt, men det har vi jo fastslått at ikke er tilfelle, da syntaksen skal være riktig.
Fant dere ut av feilen? Fint om dere deler løsningen her hvert fall