zotbar1234 Skrevet 30. desember 2011 Del Skrevet 30. desember 2011 (endret) Har et siste spørsmål, får feilen "vector subscript out of range" på denne snutten. Kan vær jeg ikke ser det fordi jeg er utrolig sliten, men flere øyne på saken kan kanskje hjelpe også! Det er alltid en god ide 1) å påpeke eksakt hvor feilen inntreffer 2) å poste det minste komplette eksempelet som illustrerer problemet. Snutten som du postet forteller ingenting om verdien til trigger. Hvordan skal man hjelpe deg da? for(b=0; b<length[trigger]; b++) { randint = (rand()%length[trigger])+1; if ( randint < length[trigger]/2 ) { sentence[b]=context[trigger][b]; } else{ randint2 = (rand()%words.size())+1; sentence[b]=words[randint2]; } } Selv med så lite informasjon som er tilgjengelig, ser man at det er en off-by-one feil i indeksering av words (randint2 kan være lik words.size() => 1 for mye i indeksen). Endret 30. desember 2011 av zotbar1234 Lenke til kommentar
Leif.ross Skrevet 8. januar 2012 Del Skrevet 8. januar 2012 Hei igjen! Fikset feilen, men driver nå å fikler med å konvertere std::string til lpcwstr slik at jeg kan bruke speech APIen til microsoft, SAPI. Har denne koden her, men det vil bare ikke fungere.. Input er string2 som er en std::string og output skal være result. std::wstring s2ws(const std::string& string2); { int len; int slength = (int)string2.length() + 1; len = MultiByteToWideChar(CP_ACP, 0, string2.c_str(), slength, 0, 0); wchar_t* buf = new wchar_t[len]; MultiByteToWideChar(CP_ACP, 0, string2.c_str(), slength, buf, len); std::wstring rstr(buf); delete[] buf; return rstr; } #ifdef UNICODE std::wstring stemp = s2ws(string2); // Temporary buffer is required LPCWSTR result = stemp.c_str(); #else LPCWSTR result = string2.c_str(); #endif Lenke til kommentar
Thomas. Skrevet 13. mai 2012 Del Skrevet 13. mai 2012 Hvor skal egentlig "min kode" inn i et wxWidgets prosjekt i Code::Blocks? Funksjonene til GUI'et ligger jo under klassenavnet, f.eks: void AppFrame::OnButton1Click2(wxCommandEvent& event) { // } AppFrame ser slik ut: class AppFrame: public wxFrame Så noen som vet hvor egen kode skal inkluderes og hvordan bruke den? Hvis jeg har en klasse som heter Test, og en funksjon i denne som heter TestFunksjon. Hvordan kan jeg kalle TestFunksjon på riktig måte i AppFrame::OnButton1Click2? Har prøvd utvide klassen og inkludere og litt slikt uten hell class AppFrame: public wxFrame, public Test Lenke til kommentar
tomsi42 Skrevet 14. mai 2012 Del Skrevet 14. mai 2012 Kan vel være greit å sjekke et par wxWidgets tutorials først? Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 Kan nokon fortelje meg kva return funksjonen gjør? Forstår ikkje kvifor vi må skrive return 0; eller andre verdiar. Lenke til kommentar
Gjest Gjest slettet-ld9eg7s96q Skrevet 28. april 2013 Del Skrevet 28. april 2013 (endret) Kan nokon fortelje meg kva return funksjonen gjør? Forstår ikkje kvifor vi må skrive return 0; eller andre verdiar. Når du implementerer en funksjon i C/C++ spesifiserer du hvorvidt denne funksjonen skal returnere en verdi. Hvis du ikke vil at funksjonen skal returnere en verdi implementerer du funksjonen som type void. For eksempel: int kalkyle() { // returnerer verdien 4 (heltall int) når du kaller denne funksjonen int verdi = 2+2; return verdi; } eller void objekt::kalkyle() { this->verdi = 2+2; } Endret 28. april 2013 av Gjest slettet-ld9eg7s96q Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 Kva skjer når ein returnerar ein verdi? Kva handling kan den returnerte verdien utføre? Lenke til kommentar
Gjest Gjest slettet-ld9eg7s96q Skrevet 28. april 2013 Del Skrevet 28. april 2013 (endret) Det er opp til programmereren å avgjøre videre hva verdien skal utføre, verdien i seg selv utfører ingen ting. All behandling av data foregår før du returnerer verdien. Du kan også returnere data som returneres av en annen funksjon igjen, f.eks: int kalkyle() { // returnerer verdien 4 (heltall int) når du kaller denne funksjonen int verdi = 2+2; return verdi; } int kalkylegangerto() { // returnerer verdien 8 return kalkyle()*2; } Det er slik alle programmeringspråk er bygget opp. Man kan dele opp koden i moduler med f.eks funksjoner for at koden skal bli lettere å lese, forstå og brukes om igjen. Eksempelet jeg skrev over er jo veldig forenklet, vanligvis sender du verdier til funksjonen som videre behandles innenfor denne stacken og som lagrer resultatet eller returnerer det. Endret 28. april 2013 av Gjest slettet-ld9eg7s96q Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 (endret) Takk Annet spm: Eg har drevet litt med python (gav opp) der eg lekte meg med if/else. Er det mogleg i C++ å kun bruke "if" ? Tenkjer der du for eksempel har 3 valg og du må velge ein av dei 3. Då er det ikkje rom for "else". Endret 28. april 2013 av Svigermors drøm Lenke til kommentar
Gjest Gjest slettet-ld9eg7s96q Skrevet 28. april 2013 Del Skrevet 28. april 2013 (endret) Hvis du bokstavelig talt skal teste for kun en verdi bruker du bare en if kontroll if (var == "verdi") { gjoernoe(); } Ellers må du teste det i en if/else statement: if (var == "verdi1") { gjoernoe(); } else if (var == "verdi2") { gjoernoeannet(); } else if (var == "verdi3") { gjoerdetsiste(); } Endret 28. april 2013 av Gjest slettet-ld9eg7s96q Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 (endret) Takk Det var ikkje til denne oppgaven eg meinte men den fungerar vel til det same. Eg trenar litt på C++ og har laga ein BMI-kalkulator. Alt funka heilt til eg byrja å skrive inn kva for ein kategori dei går under. Uansett kva tal eg førar inn, så vert alle "undervektig". #include <iostream> #include <cmath> #include <cstdlib> int main(){ using namespace std; double vekt; double lang; double lengde; double lengde5; double bmi; cout << "Kor mykje veg du? (skriv i kilogram/kg) " << endl; cin >> vekt; cout << "Kor lang er du? (Skriv i centimeter/cm) " << endl; cin >> lang; lengde = lang / 100; lengde5 = pow(lengde,2); bmi = vekt / lengde5; cout << "Din BMI er på: " << bmi << endl; if(bmi<18,5){ cout << "Du er undervektig" << endl; } else if(18.5<bmi<24.9){ cout << "Du har normalvekt" << endl; } else if(25<bmi<29.9){ cout << "Du er overvektig" << endl; } else if(30<bmi<34.9){ cout << "Du er under kategorien fedme" << endl; } else if(35<bmi<39.9){ cout << "Du er under kategorien fedme 2" << endl; } else if(39.9<bmi){ cout << "Du er under kategorien fedme 3 (ekstrem fedme)" << endl; } cin.get(); return 0; } Kan nokon sjå kva som er feil? Endret 28. april 2013 av Svigermors drøm Lenke til kommentar
Frank Drebin Skrevet 28. april 2013 Del Skrevet 28. april 2013 if(bmi<18,5){ cout << "Du er undervektig" << endl; } Prøv med punktum i stedet for komma der. 1 Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 Prøv med punktum i stedet for komma der. Så enkelt ! Tusen takk Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 Ser ut som at eg feira for tidlegt.. Alt stoppar på normalvekt Lenke til kommentar
Jaffe Skrevet 28. april 2013 Del Skrevet 28. april 2013 Det gir lite mening å skrive 18.5<bmi<24.9 (teknisk sett vil 18.5 < bmi da evalueres, og så vil verdien av det -- enten 0 eller 1 -- sammenlignes med 24.9, og 0 og 1 er jo begge mindre enn 24.9, derfor stopper programmet ditt her.) Prøv heller med 18.5 < bmi && bmi < 24.9 Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 Det gir lite mening å skrive 18.5<bmi<24.9 (teknisk sett vil 18.5 < bmi da evalueres, og så vil verdien av det -- enten 0 eller 1 -- sammenlignes med 24.9, og 0 og 1 er jo begge mindre enn 24.9, derfor stopper programmet ditt her.) Prøv heller med 18.5 < bmi && bmi < 24.9 Det funket Kan du fortelje meg kvifor ein må skrive bmi && bmi ? Lenke til kommentar
kavorka Skrevet 28. april 2013 Del Skrevet 28. april 2013 Hmm, bmi intervallene dine overlapper ikke helt. Hva skjer hvis bmi er 24.91? Dessuten trenger du ikke sjekke det nedre intervallet i de andre else if testene da det allerede er sjekket i de foregående. Dvs, i den første sjekker du om den er mindre enn 18.5, da trenger du ikke sjekke om den er større en det i test 2. Det er ikke feil, bare litt smør på flesk Dette fikser begge deler: if(bmi < 18.5){ cout << "Du er undervektig" << endl; } else if(bmi < 25.0){ cout << "Du har normalvekt" << endl; } else if(bmi < 30.0){ cout << "Du er overvektig" << endl; } else if(bmi < 35.0){ cout << "Du er under kategorien fedme" << endl; } else if(bmi < 40.0){ cout << "Du er under kategorien fedme 2" << endl; } else { cout << "Du er under kategorien fedme 3 (ekstrem fedme)" << endl; } En annen ting er hva hvis brukeren taster inn noe som ikke er et tall? Det er kanskje ikke så viktig med slik feilhåndtering i en skoleoppgave, men verdt å tenke over Lenke til kommentar
Jaffe Skrevet 28. april 2013 Del Skrevet 28. april 2013 Det funket Kan du fortelje meg kvifor ein må skrive bmi && bmi ? Først og fremst, se på koden i posten til kavorka ovenfor. Du trenger ikke disse doble sjekkene uansett. Når det er sagt, && betyr "og". Linja 18.5 < bmi && bmi < 24.9 leser du som "18.5 mindre enn bmi og bmi mindre enn 24.9". Lenke til kommentar
Svigermors drøm Skrevet 28. april 2013 Del Skrevet 28. april 2013 Tusen takk for hjelpen Jeg har lekt litt videre, hvor jeg har en til kalkulator ( 2 til sammen). Kalkulatorene er en funksjon. Det jeg vil er at når man starter, så skal man få velge hvilken kalkulator som skal brukes. Slik jeg tenker er at om personen sier "1" så går han til feks BMI og velger han "2" så går han til den andre. Jeg har funksjonene utenfor int main(){ { slik at når personen velger hvilken kalkulator så blir han sendt til funksjonen via "int main()". Variabelen har eg kalla "valg" , men hvilken type skal "valg" være? int, double, string osv. Personen skriver inn 1 ord for å velge. Jeg får det til å funke om jeg skriver inn 1 tall, men ikke med ord. Håper dere skjønner hva jeg mener. Evt, kan jeg bygge litt videre og sende inn skjemaet. Lenke til kommentar
Glutar Skrevet 28. april 2013 Del Skrevet 28. april 2013 (endret) Skal brukeren skrive inn ord kan du lese de inn i en std::string med std::cin. For eksempel: #include <string> #include <iostream> int main() { std::string user_input; std::cin >> user_input; if (user_input == "BMI") { // Call BMI function. } else if (user_input == "Calculator") { // Call calculator function. } } Endret 28. april 2013 av Glutar Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå