gamma48 Skrevet 4. februar 2006 Del Skrevet 4. februar 2006 (endret) Det var ikkje sånn det skulle bli. Har funnet ut at du skriver HEX som '\x', men korleis skriver eg dec i Dev-C++ ? Enda ein kode eg sliter med: #include <iomanip> #include <iostream> int main (int arcg, char **argv) { double D = 23.456789; int I = 123; std::cout << D << '\n' << setprecision (5) << D << " " << D << "\n" << setprecision (8) << D << " " << D << "\n"; std::cout << I << '\n' << setw(7) << setfill ('#') << I << '\n' << I; std::getchar (); return 0; } Endret 4. februar 2006 av gamma48 Lenke til kommentar
Peter Skrevet 4. februar 2006 Del Skrevet 4. februar 2006 Problemet ditt er at du ikke skjønner dette med namespaces. Alle de funksjonene du prøver å bruke er definert i std namespacet. #include <iomanip> #include <iostream> using namespace std; int main (int arcg, char **argv) { double D = 23.456789; int I = 123; cout << D << '\n' << setprecision (5) << D << " " << D << "\n" << setprecision (8) << D << " " << D << "\n"; cout << I << '\n' << setw(7) << setfill ('#') << I << '\n' << I; cin.get(); return 0; } Ting fungerer som bare det, hvis du bare tar deg litt tid til å sette deg inn i det. Du må dessuten klare å se på feilene compileren spytter ut, den sier deg ofte rett ut hva som er feil. Lenke til kommentar
gamma48 Skrevet 4. februar 2006 Del Skrevet 4. februar 2006 (endret) Bruker ein gammel bok skjønner du, det er derfor eg sliter litt. Vet eg burde skaffe ein ny, men, men. Det er derfor eg ikkje vet alle oppgraderingene i dei nye versjonene. Som dette med std:: o.l. Men eg må spørre om noe. For dere virker det kanskje heilt dumt, men eg synest ikkje det. Viss ein kode står slik på nettet eller i ein bok: //Innlesing av tall #include <iomanip.h> int main (int arcg, char **argv) { int Htall; cout << "\nTast eit heiltall: "; cin << Htall; cout << "\nDu tastet: " << Htall; getchar (); return 0; } Så kan eg da ikkje vite dette med std:: viss eg aldri har gjort det før (og ja, det står ingenting om det i boka), kan eg vel..? Kkorleis skal denne koden eigentlig skrivast da? Ganske annerdeles tenker eg...*sukke* Endret 5. februar 2006 av gamma48 Lenke til kommentar
hishadow Skrevet 5. februar 2006 Del Skrevet 5. februar 2006 (endret) Så kan eg da ikkje vite dette med std:: viss eg aldri har gjort det før (og ja, det står ingenting om det i boka), kan eg vel..?Kkorleis skal denne koden eigentlig skrivast da? Ganske annerdeles tenker eg...*sukke* 5552819[/snapback] Namespaces tok aldri av i C++. Bruker det ikke selv engang, men standard biblioteket som følger med C++ anvender det. Det er kun definert en namespace dog for standard biblioteket kalt "std". Namespace gjør ikke annet enn å pakke alle funksjoner, konstanter, structer og classer inn i et felles navngitt "eske". Antall nivåer og antall "esker" som anvendes kan brukeren bestemme selv. Hovedgrunnen for namespace er å unngå at to funksjoner/classer etc skal kunne ha samme navn, som kan være et problem hvis man kombinerer forskjellige eksterne biblioteker i et program. To biblioteker kan f.eks. ha definert en funksjon Min eller Max. Namespace løser da problemet med samme navngivning ... forutsatt av bibliotekene bruker namespace Ellers trenger du bare å huske på å bruke "std::funksjonsnavn" når du anvender standard biblioteket til C++ eller skrive "using namespace std;" etter include'ene. Da behøver du ikke skrive "std::funksjonsnavn", men i stedet skrive (som før) "funksjonsnavn". Standardbiblioteket til C++ bruker ikke endelsen ".h" i include. Endret 5. februar 2006 av hishadow Lenke til kommentar
gamma48 Skrevet 5. februar 2006 Del Skrevet 5. februar 2006 //Innlesing av tall #include <iomanip> //skulle inkludere <iosrteam>, men da virker ikkje cin. #include <iostream> int main (int arcg, char **argv) { int Htall; std::cout << "\nTast eit heiltall: "; std::cin >> Htall; std::cout << "\nDu tastet: " << Htall; std::getchar (); return 0; } Ok, takk for den forklaringen. I denne koden så kommer det fram: Tast eit heiltall: Så taster eg heiltallet: Tast eit heiltall: 32 og klikker <ENTER>, men da forsvinner vinduet. Kva gjer eg feil nå da? Lenke til kommentar
hishadow Skrevet 5. februar 2006 Del Skrevet 5. februar 2006 Tast eit heiltall: 32 og klikker <ENTER>, men da forsvinner vinduet. Kva gjer eg feil nå da? Du gjør ingen feil. Vinduet lukkes fordi programmet har fullført Tror det skal ligge noen tidligere poster angående hvordan du kan "pause" programmet når det nærmer seg avsluttning. Lenke til kommentar
Peter Skrevet 5. februar 2006 Del Skrevet 5. februar 2006 (endret) //Innlesing av tall #include <iostream> int main (int arcg, char **argv) { int Htall; std::cout << "Tast eit heiltall: "; std::cin >> Htall; std::cout << "Du tastet: " << Htall << std::endl; std::cin.get(); std::cin.get(); return 0; } Programmet avsluttes fordi den første std::cin.get() mottar en newline (0x10) og har dermed gjort sin jobb, og programmet fortsetter til return 0; Enkleste måten å fikse dette på er å slenge inn en std::cin.get() til. Ikke pent, men enkelt. Les mer om operator>>() og get(). Du vil se at operator>>() hopper over whitespace (space, newline, osv.), mens get() tar det første den får. EDIT: Mange skrivefeil her, ja. Endret 5. februar 2006 av Nazgul Lenke til kommentar
gamma48 Skrevet 24. februar 2006 Del Skrevet 24. februar 2006 (endret) #include <iostream> #include <conio.h> int main () { char Rekneop; int Tall1, Tall2; double Resultat; cout << "Tast inn to heiltall, med mellomrom mellom, og avslutt med <ENTER>: "; cin >> Tall1 >> Tall2; cin.ignore (); cout << "\nKva for rekneoperasjon vil du ha?" << "\nTast teiknet +, -, * eller /: "; cin >> Rekneop; cin.ignore (); switch (Rekneop) { case '+' : Resultat = Tall1 + Tall2; break; case '-' : Resultat = Tall1 - Tall2; break; case 'x' : cout << "Du tastet x og vil altså ha multiplikasjon."; case '*': Resultat = Tall1 * Tall2; break; case ':' : case '/' : Resultat = (double) Tall1 / Tall2; break; default : cout << "Operatoren " << Rekneop << " er ukjent!"; Rekneop = ' '; break; } if (Rekneop != ' ') cout << Tall1 << " " << Rekneop << " " << Tall2 << " = " << Resultat; else scout << "\nIngen beregning er gjort."; getche (); return 0; } Hovudpoenget her er at viss eg ikkje skriver break; etter case ':' : , så skal den brukes likt som case '/'. Eg bruker Dev-C++ frå Bloodshed, den nyeste versjonen (beta). Der virker ikkje denne koden (Ikkje tenk på std:: foran cin og cout nå). I Dev-C++ 4 virker den...... Har det noko å gjere med at siden den er Beta så er den ikkje "heilt inne i switch setningen enda", eller må du legge til ein ekstra #include i versjon 5, som du ikkje trenger i 4. Er det noko eg kan gjere for at den skal virke i versjon 5? Endret 24. februar 2006 av gamma48 Lenke til kommentar
GenericName Skrevet 24. februar 2006 Del Skrevet 24. februar 2006 Denne ser ut til å funke den. Hvis du kompilerer den nå, ville du fått errors for cin, cout og de der som ligger i std. Også har scout << "\nIngen beregning er gjort."; som man får error i, for s foran cout. Så ser ingen problemer, foreløpig. Lenke til kommentar
gamma48 Skrevet 24. februar 2006 Del Skrevet 24. februar 2006 (endret) Når eg kjører den i Dev-C++ versjon 5 får eg for eksempel dette fram: Taster x her, fordi er det meiningen skal gå under *. Tast inn to heiltall, med mellomrom mellom, og avslutt med <ENTER>: 4 5 Kva for rekneoperasjon vi du ha? Tast teiknet +, -, * eller /: x Operatoren x er ukjent! Ingen beregning er gjort. På Dev-C++ versjon 4 så går det plettfritt... Går dette an å fikse på eller må vi berre leve med det, til versjon 5 blir opptadert? PS! På beta-versjonen må vi jo skrive std:: foran, men utanom det skulle da det gå ann å skrive x... Endret 24. februar 2006 av gamma48 Lenke til kommentar
GenericName Skrevet 24. februar 2006 Del Skrevet 24. februar 2006 (endret) #include <iostream> #include <conio.h> int main () { char Rekneop; int Tall1, Tall2; double Resultat; cout << "Tast inn to heiltall, med mellomrom mellom, og avslutt med <ENTER>: "; cin >> Tall1 >> Tall2; cin.ignore (); cout << "\nKva for rekneoperasjon vil du ha?" << "\nTast teiknet +, -, * eller /: "; cin >> Rekneop; cin.ignore (); switch (Rekneop) { case '+' : Resultat = Tall1 + Tall2; break; case '-' : Resultat = Tall1 - Tall2; break; case 'x': case '*': Resultat = Tall1 * Tall2; break; case ':' : case '/' : Resultat = (double) Tall1 / Tall2; break; default : cout << "Operatoren " << Rekneop << " er ukjent!"; Rekneop = ' '; break; } if (Rekneop != ' ') cout << Tall1 << " " << Rekneop << " " << Tall2 << " = " << Resultat; else cout << "\nIngen beregning er gjort."; getche (); return 0; } Dette skulle funke. Ser ikke helt hva som er problemet. Endret 24. februar 2006 av prog master Lenke til kommentar
gamma48 Skrevet 24. februar 2006 Del Skrevet 24. februar 2006 Kva er annerdeles på din kode enn min? For meg ser dei nesten heilt like ut.... Men av ein aller annen grunn virker ikkje den eg skreiv, i motsetning til den du endra det til. Kva endringar gjorde du, klarer ikkje å se det.... Lenke til kommentar
GenericName Skrevet 24. februar 2006 Del Skrevet 24. februar 2006 Jeg tok bort den cout setning mellom, case 'x': og, case '*': Men det har ingenting å si sidenden bare kjører rett igjennom. Så det er stortsett samme kode. Her er den jeg kjører: #include <iostream> #include <conio.h> using namespace std; int main () { char Rekneop; int Tall1, Tall2; double Resultat; cout << "Tast inn to heiltall, med mellomrom mellom, og avslutt med <ENTER>: "; cin >> Tall1 >> Tall2; cin.ignore (); cout << "\nKva for rekneoperasjon vil du ha?" << "\nTast teiknet +, -, * eller /: "; cin >> Rekneop; cin.ignore (); switch (Rekneop) { case '+' : Resultat = Tall1 + Tall2; break; case '-' : Resultat = Tall1 - Tall2; break; case 'x': cout << "Du tastet x" << endl; case '*': Resultat = Tall1 * Tall2; break; case ':' : case '/' : Resultat = (double) Tall1 / Tall2; break; default : cout << "Operatoren " << Rekneop << " er ukjent!"; Rekneop = ' '; break; } if (Rekneop != ' ') cout << Tall1 << " " << Rekneop << " " << Tall2 << " = " << Resultat; else cout << "\nIngen beregning er gjort."; getche (); return 0; } Lenke til kommentar
gamma48 Skrevet 24. februar 2006 Del Skrevet 24. februar 2006 (endret) Kanskje eg har fått ein bug eller noko liknande i programmet, fordi eg kopierte filen som eg hadde skrevet, og laget ein ny kildefil, der eg limte den inn, og nå virket den. Den første kildefilen virker ikkje. Merkelig..... Det går viss kun viss eg lagrer filen med eit kortere navn. Endret 24. februar 2006 av gamma48 Lenke til kommentar
Giddion Skrevet 25. februar 2006 Del Skrevet 25. februar 2006 (endret) hvis filen ligger i samme direktiv så er vel eneste muligheten at der er noe instillinger per fil. eller så er jo muligheten det har sneket seg inn en feil ved kopieringen og innlimingen. men hvis du ser på feilene er det nok mulig å lese det der. En siste ting det er godt mulig at du vil få mange feil hvis du begyner å blande de to filene ... klasser som er definert flere ganger osv... lykke til Endret 26. februar 2006 av Giddion Lenke til kommentar
gamma48 Skrevet 25. februar 2006 Del Skrevet 25. februar 2006 Denne koden stod i boken min, men det er viss mange feil i den. Meiningen er at brukeren skal taste inn tall, og så skal programmet telle antall tall, og addere alle på slutten. Den skal bruke dowhile-setningen. #include <iostream> #include <conio.h> using namespace std; char Svar; int Tall, Antall = 0, Sum = 0; do { cout << "\nTast inn eit heiltall: "; cin >> Tall; cin.ignore (); Antall++; Sum+=Tall; cout << "\nVil du taste inn fleire tall? Svar med J/N: "; cin >> Svar; cin.ignore (); } while (Svar == 'J' || Svar == 'j'); cout << "\n\nSumme av det " << Antall << " inntastede tallen er " << Sum; getche (); return 0; } Lenke til kommentar
GenericName Skrevet 25. februar 2006 Del Skrevet 25. februar 2006 (endret) Du har blant annet glemt int main() Ehm, så ikke skikkelig i koden med en gang, var så opptatt å skrive en ny Denne skulle funke: #include <iostream> int main() { int antall = 0, tall, sum = 0; char ch; do { std::cout << "Skriv inn et tall: "; std::cin >> tall; std::cin.sync(); sum += tall; antall++; std::cout << "Vil du skrive inn flere tall? (J/N): "; ch = std::cin.get(); } while (ch == 'j' || ch == 'J'); std::cout << "Summen av de " << antall << " tallene er " << sum << std::endl; std::cin.sync(); std::cin.get(); return 0; } Det finnes mange løsninger på dette. Men siden du ville ha Do-While loop. Så fulgte jeg prinsippet ditt. Endret 25. februar 2006 av prog master Lenke til kommentar
gamma48 Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 Her er ein oppgåve eg ikkje aner korleis eg skal løse. Programmet skal lese inn eitt heiltall, og beregne antall mylige resultatlister for dette antallet personer i ein konkurranse. Altså taster brukeren f. eks. 3, skal programmet regne ut dette: Antall resultatlister blir: 1 x 2 x 3 = 6. Taster brukeren f. eks. 5, skal programmet regne det ut slik: 1 x 2 x 3 x 4 x 5 = 120 osv. Det står også at vi kan bruke denne skrive måte for det siste eksempelet: 5! - Fem-faktultét. Eg holder på med løkker, som for, dowhile, while....og skal nok bruke ein av dei. Aner ikkje korleis eg skal gjere denne koden. Kom ikkje lengre enn dette: #include <iostream> #include <conio.h> using namespace std; int main () { long Antall, Muligheter; cout << "Tast antall deltagere i konkurransen: "; cin >> Antall; cin.ignore (); Lenke til kommentar
GenericName Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 Her har du en løsning: #include <iostream> int main() { int tall; int sum = 1; std::cout << "Skriv inn et heltall: "; std::cin >> tall; tall++; for (int i=1; i<tall; i++) { sum *= i; } std::cout << "Summen blir: " << sum << std::endl; return 0; } Lenke til kommentar
Peter Skrevet 2. mars 2006 Del Skrevet 2. mars 2006 (endret) en morsommere løsning enn å bruke løkke er å bruke en rekursiv metode int fakultet(int n) { return (n<2) ? 1 : n*fakultet(n-1); } (hentet fra Stroustrups O' store) Derosm du kaller denne på tallet ditt, f.eks. f(5) så vil du få resultatet du ønsker. Endret 2. mars 2006 av Nazgul 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å