Arne Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 (endret) Hei! Her er tingen: Eg har ei while-løkke der brukaren skal taste inn ei rekkje verdiar. Brukaren skal kunne taste inn alle tal mellom 0 og 99 så mange ganger han vil, og samle sette i ein vector (vector.push_back(verdi)). Viss han taster inn "stop", skal while-testen mislykkest, og viss han tastar inn tal som er 100<, så skal den returnere 1 og programmet skal stoppe med noe sånnt: "Beklager, verdien var ugyldig." Her var det eg tenkte meg: while(cin >> temp) { if(temp = "stop") break; if (!temp < 100) return 1; else { value.push_back(temp); } } ... men breaken på "if nr 1" vil vel ikkje virke slik eg vel ha det, sidan den berre vil gå ut av if-testen. Eg må ha den til å gå ut av while-testen. Dette er ikkje noko eg serriøst treng, men dette tenkte eg var noko vikteg å lære. Endret 3. mai 2006 av Fjott Lenke til kommentar
einaros Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 std::string temp; int value; std::vector<int> values; while(cin >> temp) { if(temp.compare("stop") == 0) break; int value = std::atoi(temp.c_str()); if(!value < 100) { std::cout << "Ugyldig verdi: " << value << std::endl; return 1; } else { values.push_back(value); } } Ingen garanti for at det kompilerer off-the-shelf, men det gir i hvertfall idéer om hva du bør gjøre. Lenke til kommentar
Dead_Rabbit Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 ... bool run = true; while(cin >> temp && run) { if(temp == "stop") run = false; } ... } Lenke til kommentar
Arne Skrevet 3. mai 2006 Forfatter Del Skrevet 3. mai 2006 Takk, zirener, tusen takk! Skal teste det no, kjem tilbake viss eg får problem. (Noko eg sannsynlegvis ikkje får) Lenke til kommentar
Arne Skrevet 3. mai 2006 Forfatter Del Skrevet 3. mai 2006 Eg lurar litt på ein ting: while (cin >> x && run){ if (x = "stop") while_run = false; if(!x < 100 || !x > 0){ cout << "Inputtet er ikkje gyldig"; return 1; } value.push_back(x); } I det tilfelle at x = stop, då vil if test nr 2 blir false, sidan x= "stop", og dermed vil programmet returenere, og misslykkes. Btw, koleis kan eg lage ein var som kan helde både tal og bokstavar? string variabelnavn = "hei på deg"; Vil eg då kunne endre same strengen frå "hei på deg" til f eks. 23? Lenke til kommentar
Mapster Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 (endret) Så vidt jeg vet ja, men du kan ikke bruke det i matematiske beregninger. Med mindre du endrer det til int via ostringstream og str(). edit: nei, søren det var feil vei. hvis det er string gjør du slik: int tall = atoi(tekst.c_str()); Endret 3. mai 2006 av MapSter Lenke til kommentar
Arne Skrevet 3. mai 2006 Forfatter Del Skrevet 3. mai 2006 Ok, takk. Er det nokon som kan svaret på det fyrste spørsmålet mitt? Hjelpsame folk her! Lenke til kommentar
Oracel Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Du fikk løsningen på problemet ditt i innlegg nr. 2 i denne tråden. Og slutt å vær så wannabi-kul lzm. Lenke til kommentar
Klette Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Les svarene du får din fjott! Du har fått svar på alle spørsmålene dine... shrug.. Lenke til kommentar
einaros Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Eg lurar litt på ein ting: while (cin >> x && run){ if (x = "stop") while_run = false; if(!x < 100 || !x > 0){ cout << "Inputtet er ikkje gyldig"; return 1; } value.push_back(x); } 1. Når du gjør en sammenligning, bruk '==', ikke '='. 2. Bruk string::compare i stedet for 'var == "streng"'. 3. Å sjekke om 'run' er true i while-evalueringa, er ikke en god idé. I dette tilfellet ender du med å dytte x opp på bufferen, selv om "stop" er det som skrives inn. Bruk break, eller continue etter å ha satt flagget. 4. Hvorfor leste du ikke koden jeg la inn som svar? Den burde løse det meste. Lenke til kommentar
Dead_Rabbit Skrevet 3. mai 2006 Del Skrevet 3. mai 2006 Sjekk ut det einaros skrev da. Det funker.. *sukk* Lenke til kommentar
Arne Skrevet 4. mai 2006 Forfatter Del Skrevet 4. mai 2006 (endret) Takk, men eg lurte på om det er nokon enklare måtar å gjere det på. Trur kanskje enkelte misforsod her, det var faktisk ikkje ironi det med at det var mange hjelpsame folk her. Så, du får slutte å vere vannabi kul sjølv, Oracel. Koden til einaros er sikkert super, den. Det er berre det at det er ein god del nye ting i den, men eg spør når eg lurar på noko. Eg plar ikkje vere særleg ironisk... Grunnen til at eg gjekk rett på zirener sitt var, var at det var så enkelt. atoi og c_str forstod eg ikkje mykje av. EDIT: Eg har ein mistanke om at atoi-linja gjer om int'en til ein string. Endret 4. mai 2006 av Fjott Lenke til kommentar
Peter Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 atoi gjør om en char* til en integer. Dvs. den returnerner de første tallene i char-arrayet(char*). Dette er dog ikke noen god c++-måte å gjøre det på. (C++-måten bruker stringstream) c_str() returner et char-array(char*) fra et std::string-objekt Lenke til kommentar
einaros Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 atoi gjør om en char* til en integer. Dvs. den returnerner de første tallene i char-arrayet(char*). Dette er dog ikke noen god c++-måte å gjøre det på. (C++-måten bruker stringstream)c_str() returner et char-array(char*) fra et std::string-objekt 6041324[/snapback] StringStream brukes ikke for å gjøre char* til int, nei. Motsatt, derimot. Lenke til kommentar
Peter Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 (endret) #include <iostream> #include <sstream> int main (int argc, char **argv) { char* s1 = "432", *s2 = "234.432"; int x1=0; float x2 = 0.0f; std::stringstream str1, str2; std::cout << "s: " << s1 << std::endl; std::cout << "s2: " << s2 << std::endl; std::cout << "x1: " << x1 << std::endl; std::cout << "x2: " << x2 << std::endl; str1 << s1; str1 >> x1; std::cout << "x1: " << x1 << std::endl; str2 << s2; str2 >> x2; std::cout << "x2: " << x2 << std::endl; std::cin.get(); return 0; } Endret 4. mai 2006 av Nazgul Lenke til kommentar
Mapster Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 atoi og c_str forstod eg ikkje mykje av. EDIT: Eg har ein mistanke om at atoi-linja gjer om int'en til ein string. 6041080[/snapback] Når du lærer mer om tekststrenger så lærer du også om funksjonen c_str(). For å gjøre ett tall i en tekststreng (string) om til int gjør du slik: string tallStreng = "124"; int tall = atoi(tallStreng.c_str()); c_str() funksjonen gjør tekststrengen om til en nullterminert tekststreng, noe som er det eneste atoi() funksjonen kan bruke. labs() og atof() brukes for datatypen long og flyttall. Lenke til kommentar
Arne Skrevet 4. mai 2006 Forfatter Del Skrevet 4. mai 2006 På koden til einaros, ser eg break; Kva er det den breaker? while'en eller if'en den er i? Korleis skal while'en kunne vite om den skal kjøre på nytt? Lenke til kommentar
dayslepr Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 (endret) break "hopper ut av" den innerste while, do eller for-løkken .. den brukes også i sammenheng med switch selv om det hadde gitt mening (edit: altså semantisk sett) å bruke break i f.eks. if-sammenheng er ikke dette definert i C/C++-standarene, og dermed ikke mulig .. man kan i stedet neste med en ekstra if (edit: eller bruke goto, så klart ) Endret 4. mai 2006 av dayslepr Lenke til kommentar
Arne Skrevet 5. mai 2006 Forfatter Del Skrevet 5. mai 2006 Kva for ei headerfil må eg inkludere for å få x.compare() til å virke? Lenke til kommentar
Dead_Rabbit Skrevet 5. mai 2006 Del Skrevet 5. mai 2006 Samme haderfilen som inneholder deklarasjoner for x sin type. 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å