Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

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;
}

:ermm::hmm::(

Endret av gamma48
Lenke til kommentar
Videoannonse
Annonse

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

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 av gamma48
Lenke til kommentar
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 av hishadow
Lenke til kommentar

//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
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

//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 av Nazgul
Lenke til kommentar
  • 3 uker senere...

#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...... :dontgetit:

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. :dontgetit:

 

Er det noko eg kan gjere for at den skal virke i versjon 5?

Endret av gamma48
Lenke til kommentar

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 av gamma48
Lenke til kommentar

#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 av prog master
Lenke til kommentar

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

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..... :dontgetit:

Det går viss kun viss eg lagrer filen med eit kortere navn.

Endret av gamma48
Lenke til kommentar

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 :thumbup:

Endret av Giddion
Lenke til kommentar

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;
}

:dontgetit:

Lenke til kommentar

Du har blant annet glemt int main()

Ehm, så ikke skikkelig i koden med en gang, var så opptatt å skrive en ny :p

 

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 av prog master
Lenke til kommentar

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

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

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 av Nazgul
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...