Gå til innhold

Gangeprogram med cin.get()


Anbefalte innlegg

Jeg er nybegynner i c++.

 

#include <iostream>

int mult(int a, int b);
int main()
{
int a, b;

 cout<<"\n Skriv inn to tall som skal multipliseres \n";
 cin>>a>>b;
 cout<<"\n Svaret på gangestykket er "<<mult(a, b)<<" \n";
 return 0;
}
  int mult(int a, int b)
{
  return a*b;
}

 

Jeg skal hindre programmet i å "forsvinne" før jeg ser svaret, men

får det ikke til. Har prøvd med cin.get(). Hvor skal man skrive inn cin.get()? (kanskje jeg skrev inn feil sted)

 

Et spørsmål til;

Hvorfor trenger "int mult(int a, int b);" og være med både på begynnelsen

OG på slutten?

Endret av firstperson
Lenke til kommentar
Videoannonse
Annonse

Du kan da altids prøve med en 'cin.ignore(100, '\n')' før du bruker cin.get() på slutten, tror det vil virke.

 

Grunnen til at funksjonen din må være deklarert på toppen og, er fordi den brukes i main(), og siden main() er over selve funksjonen, må den deklareres før den brukes. Å bruke den uten å først deklarere den virker dårlig :)

Lenke til kommentar

Dette spm. er blitt tatt opp hundevis av ganger her, men ok:

 

Legg til cin.get(); eller system("pause"); før linjen return 0;

 

Dette med mult-funksjonen handler om deklarasjoner og definisjoner (declaration og definition), og står forklart i detalj i de fleste C++-bøker.

 

Du kan gjøre slik:

int mult(...)
{
 // kode her
}

int main()
{
// kode her .. som kaller mult
}

 

Edit:

Svarte visst samtidig .. heh :]

Endret av søppel
Lenke til kommentar

 

Dette spm. er blitt tatt opp hundevis av ganger her, men ok:

 

Legg til cin.get(); eller system("pause"); før linjen return 0;

 

 

Jeg skriver jo at jeg har lagt inn cin.get(); , men at det ikke virker.

Jeg skriver inn før return 0; men det forsvinner allikevel.

 

EDIT:

Sorry, koden jeg hadde lagt til var den uten cin.get(); , men jeg har prøvd, altså.

Endret av firstperson
Lenke til kommentar

Noe slikt;

#include <iostream>

using namespace std;


int mult(int a, int b)
{
return a*b;
} // mult


int main()
{
int a, b;

cout << "Skriv inn to tall som skal multipliseres: ";
cin >> a >> b;
cout << "\nSvaret på gangestykket er " << mult(a, b) << '\n';
cin.ignore();
cin.get();

return(0);
} // main

 

..man må bruke ignore noen ganger (Bøb var inne på dette).

Endret av søppel
Lenke til kommentar

Prøv denne koden. Med system("Pause"); er det umulig at vinduet forsvinne rmed en gang. Btw, hvilken editor/kompiler bruker du? Jeg bruker dev-c++ og vs.net.

 

Code:

 

include <iostream>

 

using namespace std;

 

int main()

{

    cout<<"Hello, world!";

   

    system("PAUSE");

    return 0;

   

    }

Endret av reznor15
Lenke til kommentar

Ok, nå har jeg utvidet programmet litt, slik at det både kan multiplisere, addere, substraktere og dividere.

Jeg bruker nå float, slik at det kan skrive ut desimaler. Men hva kan jeg gjøre for at programmet kan regne med høyere tall?

Hvis det går over f.eks. en million, blir det error.

Lenke til kommentar

#include <iostream>

using namespace std;


int main()
{
float f;
cin >> f;
cout << f << endl;
return(0);
} // main

 

1000000

1e+06

 

1 million går fint her.

 

Hvis du tenker på den rare notasjonen så er det såkalt "vitenskapelig notasjon". For å få vanlig notasjon:

 

#include <iostream>

using namespace std;


int main()
{
float f;
cin >> f;
cout << fixed << f << endl;
return(0);
} // main

 

1000000

1000000.000000

 

http://www.cpp.no/lars/ticpp-v2/#_Toc53985693 og http://www.cpp.no/lars/ticpp-v2/#_Toc53985688

Lenke til kommentar
Hvorfor bruke float istedenfor double forresten? En variabel av typen double har på x86 53bits mantisse, men det er likevel lavere presisjon enn hva maskinen bruker internt (64 vil jeg tro).

Jeg får ikke skrevet ut desimaler med double . f.eks. 5/4 blir 1, mens med float blir det 1.25

 

EDIT: srkifveil

Endret av firstperson
Lenke til kommentar

Må være noe annet som er galt i så fall, firstperson - både float og double er flytetall -- med desimaler altså.

 

Edit:

#include <iostream>

using namespace std;


int main()
{
double d = 5.0 / 4.0;
float f = 5.0f / 4.0f;
cout << fixed << d << endl;
cout << fixed << f << endl;
return(0);
} // main

1.250000

1.250000

Endret av søppel
Lenke til kommentar
Må være noe annet som er galt i så fall, firstperson - både float og double er flytetall -- med desimaler altså.

Det er godt mulig, kan ikke så mye c++. Men programmet leste jeg fra en tidligere tråd her, der var det brukt double. Men da jeg oppdaget at det ikke ble desimaler, synes jeg jeg det var rart, for jeg hadde lest at double var flyttall.

Så jeg skrev programmet på nytt, akkurat likt, (byttet fra if til switch ) men med float

denne gangen, og da gikk det. :hmm:

 

 

EDIT::::: Det virker hvis jeg skriver inn tallene som skal summeres før jeg kompilerer, men hvis jeg skriver slik at brukeren skal skrive inn tallene, og programmet regne det ut, går det ikke.

#include <iostream>

using namespace std;


int main()
{
double d = 5.0 / 4.0;
float f = 5.0f / 4.0f;
cout << fixed << d << endl;
cout << fixed << f << endl;
return(0);
} // main

 

virker hos meg også.

Endret av firstperson
Lenke til kommentar
men hvis jeg skriver slik at brukeren skal skrive inn tallene, og programmet regne det ut, går det ikke.

#include <iostream>

using namespace std;


int main()
{
double d1, d2;
cout << "Type inn two floating point (double) numbers: ";
cin >> d1 >> d2;
cout << d1 / d2 << endl;

float f1, f2;
cout << "Type inn two floating point (float) numbers: ";
cin >> f1 >> f2;
cout << f1 / f2 << endl;

return(0);
} // main

 

Edit:

btw, A_N_K:

Var ikke klar over det der - så det er ingenting å spare i det hele tatt ved å bruke float (spør generellt siden jeg ikke kan spørre mer spesifikt ..heh, tenker f.eks. på overføring på bussen, og lagring i minnet, e.l.)? Lurer forresten på om skjermkort fortsatt bruker float internt, eller hva; det er irriterende å skrive OpenGL-kode (f.eks. et bibliotek) og måtte "avgjøre" om ting skal være float eller double (GLfloat, GLdouble) på brukerens vegne.

 

Edit2:

Etter en sjekk med sizeof ser det ut til at double her tar 8 bytes og float tar 4 - så man (jeg?) sparer i hvertfall litt minne og båndbredde ved å bruke float fremfor double i de tilfeller der doubles nøyaktighet/størrelse ikke er nødvendig, tror jeg.

Endret av søppel
Lenke til kommentar


#include <iostream>     
#include <cstdlib>    
using namespace std;

 int regn_svar(double tall1, double tall2, char regneart);
 int main(int argc, char *argv[])
{   
double tall1;       
 double tall2;
 char regneart;     

 cout<<"Skriv inn et regnestykke, med enter mellom hvert tall. \n";
cin>>tall1>>regneart>>tall2;
  double svar=regn_svar(tall1, tall2, regneart);
cout<<tall1<<" "<<regneart<<" "<<tall2<<" ";
cout<<"= "<<svar;
  cin.ignore();
  cin.get();
  return 0;

} //slutt main

int regn_svar(double tall1, double tall2, char regneart)
{
double svar;
 if (regneart=='+') svar=tall1+tall2; 
 if (regneart=='/') svar=tall1/tall2;
 if (regneart=='*') svar=tall1*tall2;
 if (regneart=='-') svar=tall1-tall2;
return svar;
cin.ignore();
cin.get();
}  



 

EDIT: Skiftet til double-versjonen. Hvorfor kommer det ikke desimaler? Noen som ser feilen?

Endret av firstperson
Lenke til kommentar
Hvorfor bruke float istedenfor double forresten? En variabel av typen double har på x86 53bits mantisse, men det er likevel lavere presisjon enn hva maskinen bruker internt (64 vil jeg tro).

fordi det er raskere med float enn med double?

Lenke til kommentar
Hvorfor bruke float istedenfor double forresten? En variabel av typen double har på x86 53bits mantisse, men det er likevel lavere presisjon enn hva maskinen bruker internt (64 vil jeg tro).

fordi det er raskere med float enn med double?

Søppel: Jeg vet ærlig talt ikke med OpenGL, jeg ser det finnes double- og float-utgaver av funksjoner, så jeg går utifra at det kan ha innvirkning på hastighet. Geforce 6800 bruker 32bit presisjon så vidt jeg kan se, så float er kanskje mer effektivt for GPU-programmering?

 

Saboi: Vil float gå raskere så lenge CPUen jobber med extended precision? Fordelen med float er i de fleste tilfeller lavere minnebruk, så vidt jeg vet.

 

Edit: Det jeg kan komme på som referanse er at bruken av float i Steinbergs VST-rammeverk (DSP-plugins) ble diskutert i forbindelse med framtidige forbedringer, den fordelen med float som kom opp var plassbesparing. På den annen side, hvis man skrur på single precision i CPU er det mulig at man vil se bedre ytelse (Intel og MSVC reduserer vel presisjonen til double, default).

Endret av A_N_K
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...