C++ — cout.setf(ios_base::showpoint); [LÖST]

Här diskuteras programmering och utveckling
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

C++ — cout.setf(ios_base::showpoint); [LÖST]

Inlägg av Johnny Rosenberg »

Eller bara showpoint; om man så vill.

Detta dök upp i ett övningsexempel i en bok jag köpte nyligen utan att de kommenterades över huvud taget. Lite jagande på nätet gav följande information och lite till: "print trailing zeros".

Jag provade att ändra i övningsexemplet till noshowpoint;, vilket tydligen ska vara motsatsen, men när jag körde programmet kunde jag inte se någon skillnad. Kan någon ge mig ett kort programexempel på när denna lilla sats, så att säga, har någon praktisk betydelse?

Så här ser övningsexemplet ut:

Kod: Markera allt

// outfile.c++ — skriva till en fil
#include <iostream>
#include <fstream>

int main()
{
  using namespace std;

  char automobile[50];
  int year;
  double a_price, d_price;

  ofstream outFile;               // Skapa objekt för utmatning
  outFile.open("bilinfo.txt");    // Associera med en fil

  cout << "Skriv in märke och modell: ";
  cin.getline(automobile,50);
  cout << "Skriv in årsmodell: ";
  cin >> year;
  cout << "Skriv in ursprungligt begärt pris: ";
  cin >> a_price;
  d_price=0.913*a_price;

  // Visa information på skärmen med cout

  cout << fixed;
  cout.precision(2);
  cout.setf(ios_base::showpoint);
  cout << "Märke och modell: " << automobile << endl;
  cout << "År: " << year << endl;
  cout << "Begärt pris: " << a_price << " kr\n";
  cout << "Pris nu: " << d_price << " kr\n";

  // Gör nu samma sak med outFile istället för cout

  outFile << fixed;
  outFile.precision(2);
  outFile.setf(ios_base::showpoint);
  outFile << "Märke och modell: " << automobile << endl;
  outFile << "År: " << year << endl;
  outFile << "Begärt pris: " << a_price << " kr\n";
  outFile << "Pris nu: " << d_price << " kr\n";

  outFile.close();                    // Klar med filen
  return 0;
}
Som sagt, jag körde programmet några gånger och matade in lite olika, mer eller mindre sannolika värden, men kunde inte märka någon skillnad på hur saker skrevs ut om jag hade med raden cout.setf(ios_base::showpoint); eller inte. Provade även att ersätta den med cout << showpoint; respektive cout << noshowpoint;, men inget av det gav heller någon skillnad. Fick mina två decimaler och de siffror jag matat in i övrigt hur jag än gjorde. Kompilatorn svalde allt och tyckte säkert att jag skrivit ett kanonbra program… ;)

J.R.

P.S. Någon som fattade vad jag egentligen undrade? Inte? Okej, jag ville bara ha ett kort exempel på när cout << showpoint; och cout << noshowpoint; ger olika resultat. D.S.
Senast redigerad av 1 DrMegahertz, redigerad totalt 21 gånger.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

SV: C++ — cout.setf(ios_base::showpoint);

Inlägg av Lars »

Testa det här så kanske det klarnar:

Kod: Markera allt

#include <iostream>

using namespace std;

int main()
{
  cout.precision(5);
  cout << 3.0 << endl;
  cout << showpoint;
  cout << 3.0 << endl;
  cout << noshowpoint;
  cout << 3.0 << endl;
}
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

SV: C++ — cout.setf(ios_base::showpoint);

Inlägg av Johnny Rosenberg »

Aha, nu tror jag det klarnar lite. Det verkar som att det är raden cout << fixed; i mitt exempel ovan som gör att cout << showpoint; "sätts ur spel", så att säga. Testade att lägga till den raden i din programsnutt också och då fick jag 5 decimaler i samtliga fall. Innan var det 0, 4 respektive 0 decimaler, eller om man så vill, 1, 5 respektive 1 värdesiffra.

Då kan man ju undra varför de hade med showpoint i just detta övningsexemplet, när det ändå inte har någon verkan i just det fallet.

J.R.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Programmering och webbdesign"