Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อพิมพ์ค่าในรูปแบบที่กำหนด


สมมติว่าเราได้รับค่าสองเท่าสามค่า เราต้องจัดรูปแบบและพิมพ์ในรูปแบบต่อไปนี้

  • เราต้องพิมพ์ส่วนจำนวนเต็มของค่าแรกในรูปแบบเลขฐานสิบหกด้วยตัวพิมพ์เล็ก

  • เราต้องพิมพ์ค่าที่สองเป็นทศนิยมสองตำแหน่งโดยใส่เครื่องหมายไว้ข้างหน้าเพื่อแสดงว่าเป็นค่าบวกหรือค่าลบ ค่าที่สองที่จะพิมพ์จะต้องถูกปรับให้ถูกต้องและมีความยาว 15 อักขระ บุด้วยขีดล่างในตำแหน่งที่ไม่ได้ใช้ด้านซ้าย

  • เราต้องพิมพ์ค่าที่สามเป็นทศนิยม 9 ตำแหน่งเป็นสัญกรณ์วิทยาศาสตร์

ดังนั้น หากอินพุตเป็น 256.367, 5783.489, 12.5643295643 ผลลัพธ์จะเป็น

0x100
_______+5783.49
1.256432956E+01

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • แฟล็กฐานสิบหกพิมพ์ค่าในรูปแบบเลขฐานสิบหก แฟล็ก showbase แสดงคำนำหน้า '0x' สำหรับค่าฐานสิบหก แฟล็กด้านซ้ายจะใส่ค่าลงในฟิลด์เอาต์พุตด้วยการแทรกอักขระเติมทางด้านขวาของค่า และแฟล็ก nouppercase จะพิมพ์ ออกมาเป็นอักษรตัวพิมพ์เล็กทั้งหมด

  • แฟล็กด้านขวาใส่ค่าลงในฟิลด์เอาต์พุตด้วยการแทรกอักขระเติมทางด้านซ้ายของค่า แฟล็กคงที่พิมพ์ค่าในรูปแบบจุดคงที่ ชุด (15) ตั้งค่าความยาวของฟิลด์เอาต์พุตเป็น 15 แฟล็ก showpos แทรกเครื่องหมาย '+' ก่อนผลลัพธ์ setfill('_') คั่นผลลัพธ์ด้วยขีดล่าง และ setprecision() ตั้งค่าความแม่นยำของค่าสูงสุด 2 ตำแหน่งทศนิยม

  • setprecision() ตั้งค่าพรีซิชั่นของค่าสูงสุด 9 ตำแหน่ง แฟล็กทางวิทยาศาสตร์พิมพ์ค่าในรูปแบบสัญกรณ์วิทยาศาสตร์ ตัวพิมพ์ใหญ่ทำให้ค่าเอาต์พุตเป็นตัวพิมพ์ใหญ่ทั้งหมด และ noshowpos ละเว้นเครื่องหมายบวกใดๆ ก่อนค่าเอาต์พุต

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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

void solve(double a, double b, double c) {
   cout << hex << showbase << nouppercase << left << (long long) a << endl;
   cout << right << fixed << setw(15) << setfill('_') << setprecision(2) << showpos << b << endl;
   cout << setprecision(9) << scientific << uppercase << noshowpos << c << endl;
}
int main() {
   solve(256.367, 5783.489, 12.5643295643);
   return 0;
}

อินพุต

256.367, 5783.489, 12.5643295643

ผลลัพธ์

0x100
_______+5783.49
1.256432956E+01