2016-07-01 8 views
0
#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() 
{ 

const double PI = 3.14159; 
double rad = 0; 
double area = 0; 
double vol = 0; 
int areaPi = 0; 
int volPi = 0; 

cout << setprecision(5) << fixed; 
cout << setw(38) << left << "Enter radius for the sphere: " << right); 
cin >> rad; 

area = (4 * PI * (rad * rad)); 
vol = ((4.0/3.0) * PI * (rad * rad * rad)); 
areaPi = (4 * (rad *rad)); 
volPi = (4 * (rad * rad * rad)); 

cout << right << "Surface area of the sphere: " << setw(12) << area << " (" << areaPi << "\u03C0)"; 
cout << "\n"; 
cout << "The volume of the sphere: " << setw(14) << vol << " (" << volPi << "π/3)"; 
cout << "\n"; 

return 0; 
} 

Hallo Leute. Das Problem, das ich habe, ist, dass der Cursor, wenn Sie einen Wert für die radius (rad) Variable eingeben, sich von links nach rechts arbeiten will, wenn der Benutzer zweistellige Zahlen eingibt, die länger als die Ausgabespalten sind.Wie kann ich meinen Cursor so ausrichten, dass er mit meinen Ausgabespalten in einem Terminalprogramm übereinstimmt?

Es sieht wie folgt aus, wenn das Programm ausgeführt wird und Sie etwas länger als eine Ziffer eingeben:

//Enter radius for the sphere:   17 
//Surface area of the sphere: 3631.67804 (1156π) 
//The volume of the sphere: 20579.50889 (19652π/3) 

ich die 7 möchte mit der Spalte darunter aufreihen. Ich habe versucht, die Breite auf eine Einstellung kleiner als ich hatte, bevor & einstelligen Bereich einen Raum zu weit wie so nach links am Ende:

//Enter radius for the sphere:   4 
//Surface area of the sphere: 201.06176 (64π) 
//The volume of the sphere:  268.08235 (256π/3) 

Antwort

0

ich die Ausgabe in eine Menge von Strings würde speichern. Dann könnten Sie die Daten nach Bedarf überprüfen und bearbeiten. Alternativ können Sie die Plätze Offset berechnen Sie vor dem Drucken bräuchten

// convert to string for digit count 
std::string output_1 = std::to_string(x); 
std::string output_2 = std::to_string(y); 
int o_1_2_dist = output_1.size() - output_2.size(); // difference in digits 
std::string padding_1, padding_2; 
if (o_1_2_dist < 0) 
    padding_1 = std::string(abs(o_1_2_dist), ' '); 
else 
    padding_2 = std::string(o_1_2_dist, ' '); 
std::cout << padding_1 << output_1 << '\n' << padding_2 << output_2; 

Sie auf der Ausgabestrings einstellen wollen würde, damit es nicht die zusätzlichen Bits der Zahl zählt nicht kümmern . Vielleicht tun output_1 = std::to_string(floor(x)); oder so etwas, so dass Sie die Nachkommastellen nicht zählen

+0

Danke! Ich musste den Auftrag so umwandeln, wie ich gesehen habe, ich muss etwas mehr verstehen. ABER ich werde versuchen, meinen Code dieses Wochenende zu beheben und versuchen, zu verstehen, was Sie sagen und es auf meinen Code anwenden. Wir haben noch keine Saiten in der Klasse (comp sci 1A) bekommen, also werde ich mein Bestes geben. Vielleicht ist es Zeit, weiter zu lesen. – biggerx

+0

Sie konnten die Ziffern manuell zählen, indem Sie durch Exponenten von zehn dividieren, dann verwenden Sie das, um Leerzeichen in einer for-Schleife von 'std :: cout << 'zu drucken: P –

+0

Ok, ich werde das auch versuchen! Jedes Beispiel hilft mir so vielen Dank! – biggerx

0

Dies kann durch Berechnen der Länge der Eingabe gelöst werden. Ich habe die to_string von C++ 11 verwendet, um die resultierenden Werte in Strings umzuwandeln und ihre Längen herauszufinden. Ich habe nicht versucht, wie tragbar das ist. Es scheint unter Linux mit gcc 6.1.1 zu funktionieren, aber aus irgendeinem Grund hat es nicht mit der Eingabe funktioniert, also habe ich auch diesen Teil geändert, so dass der Benutzer eine std::string eingibt, die danach in eine Doppel konvertiert wird.

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

int main() 
{ 

const double PI = 3.14159; 
double rad = 0; 
double area = 0; 
double vol = 0; 
int areaPi = 0; 
int volPi = 0; 

int width_col1 = 40; 

//cout.fill('.'); 
cout << setprecision(5) << fixed; 
cout << left << setw(width_col1) << "Enter radius for the sphere: " << right; 
std::string input; 
cin >> input; 

rad = stod(input); 

area = (4 * PI * (rad * rad)); 
vol = ((4.0/3.0) * PI * (rad * rad * rad)); 
areaPi = (4 * (rad *rad)); 
volPi = (4 * (rad * rad * rad)); 

int indent = width_col1 + input.length() + 1; 

cout << left << setw(indent - to_string(area).length()) << "Surface area of the sphere: " << area << " (" << areaPi << "\u03C0)" << std::endl; 
cout << left << setw(indent - to_string(vol).length()) << "The volume of the sphere: " << vol << " (" << volPi << "π/3)" << std::endl; 

return 0; 
} 
  • Diese Lösung ähnelt dem, was C-Programmierer mit printf getan hätte.

  • Ich würde gerne lernen, warum das mit dem Eingang nicht funktioniert hat.

Verwandte Themen