程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++編程中的格局化輸入詳解

C++編程中的格局化輸入詳解

編輯:關於C++

C++編程中的格局化輸入詳解。本站提示廣大學習愛好者:(C++編程中的格局化輸入詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++編程中的格局化輸入詳解正文


在輸入數據時,為輕便起見,常常不指定輸入的格局,由體系依據數據的類型采用默許的格局,但有時願望數據按指定的格局輸入,如請求以十六進制或八進制情勢輸入一個 整數,對輸入的小數只保存兩位小數等。有兩種辦法可以到達此目標。一種是應用掌握符的辦法;第2種是應用流對象的有關成員函數。分離論述以下。
應用掌握符掌握輸入格局

掌握格局的應用辦法這裡不再贅述,僅舉例解釋
[例] 用掌握符掌握輸入格局。

#include <iostream>
#include <iomanip>//不要忘卻包括此頭文件
using namespace std;
int main()
{
  int a;
  cout<<"input a:";
  cin>>a;
  cout<<"dec:"<<dec<<a<<endl; //以十進制情勢輸入整數
  cout<<"hex:"<<hex<<a<<endl; //以十六進制情勢輸入整數a
  cout<<"oct:"<<setbase(8)<<a<<endl; //以八進制情勢輸入整數a
  char *pt="China"; //pt指向字符串"China"
  cout<<setw(10)<<pt<<endl; //指定域寬為,輸入字符串
  cout<<setfill('*')<<setw(10)<<pt<<endl; //指定域寬,輸入字符串,空白處以'*'填充
  double pi=22.0/7.0; //盤算pi值
  //按指數情勢輸入,8位小數
  cout<<setiosflags(ios::scientific)<<setprecision(8);
  cout<<"pi="<<pi<<endl; //輸入pi值
  cout<<"pi="<<setprecision(4)<<pi<<endl; //改成位小數
  cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl; //改成小數情勢輸入
  return 0;
}

運轉成果以下:

input a:34↙(輸出a的值)
dec:34          (十進制情勢)
hex:22          (十六進制情勢)
oct:42          (八進制情勢)
     China        (域寬為)
*****China        (域寬為,空白處以'*'填充)
pi=3.14285714e+00    (指數情勢輸入,8位小數)
pi=3.1429e+00      (指數情勢輸入,4位小數)
pi=3.143         (小數情勢輸入,精度仍為)


用流對象的成員函數掌握輸入格局

除可以用掌握符來掌握輸入格局外,還可以經由過程挪用流對象cout頂用於掌握輸入格局的成員函數來掌握輸入格局。用於掌握輸入格局的經常使用的成員函數見表

流成員函數setf和掌握符setiosflags括號中的參數表現格局狀況,它是經由過程格局標記來指定的。格局標記在類ios中被界說為列舉值。是以在援用這些格局標記時要在後面加上類名ios和域運算符“::”。格局標記見下表

[例] 用流掌握成員函數輸入數據。

#include <iostream>
using namespace std;
int main( )
{
  int a=21
  cout.setf(ios::showbase);//顯示基數符號(0x或)
  cout<<"dec:"<<a<<endl;     //默許以十進制情勢輸入a
  cout.unsetf(ios::dec);     //終止十進制的格局設置
  cout.setf(ios::hex);      //設置以十六進制輸入的狀況
  cout<<"hex:"<<a<<endl;     //以十六進制情勢輸入a
  cout.unsetf(ios::hex);     //終止十六進制的格局設置
  cout.setf(ios::oct);      //設置以八進制輸入的狀況
  cout<<"oct:"<<a<<endl;     //以八進制情勢輸入a
  cout.unseft(ios::oct);
  char *pt="China";       //pt指向字符串"China"
  cout.width(10);        //指定域寬為
  cout<<pt<<endl;        //輸入字符串
  cout.width(10);        //指定域寬為
  cout.fill('*');        //指定空白處以'*'填充
  cout<<pt<<endl;        //輸入字符串
  double pi=22.0/7.0;      //輸入pi值
  cout.setf(ios::scientific);  //指定用迷信記數法輸入
  cout<<"pi=";          //輸入"pi="
  cout.width(14);        //指定域寬為
  cout<<pi<<endl;        //輸入pi值
  cout.unsetf(ios::scientific); //終止迷信記數法狀況
  cout.setf(ios::fixed);    //指定用定點情勢輸入
  cout.width(12);        //指定域寬為
  cout.setf(ios::showpos);   //負數輸入“+”號
  cout.setf(ios::internal);   //數符湧現在左邊
  cout.precision(6);      //保存位小數
  cout<<pi<<endl;        //輸入pi,留意數符“+”的地位
  return 0;
}

運轉情形以下:

dec:21(十進制情勢)
hex:0x15         (十六進制情勢,以x開首)
oct:025         (八進制情勢,以開首)
     China        (域寬為)
*****China        (域寬為,空白處以'*'填充)
pi=**3.142857e+00    (指數情勢輸入,域寬,默許位小數)
+***3.142857       (小數情勢輸入,精度為,最左邊輸入數符“+”)

對法式的幾點解釋:
1) 成員函數width(n)和掌握符setw(n)只對厥後的第一個輸入項有用。如:

  cout. width(6);
  cout <<20 <<3.14<<endl;


輸入成果為 203.14

在輸入第一個輸入項20時,域寬為6,是以在20後面有4個空格,在輸入3.14時,width (6)已不起感化,此時按體系默許的域寬輸入(按數據現實長度輸入)。假如請求在輸入數據時都按指定的統一域寬n輸入,不克不及只挪用一次width(n),而必需在輸入每項前都挪用一次width(n>,下面的法式中就是如許做的。

2) 在表中的輸入格局狀況分為5組,每組中同時只能選用一種(例如dec、hex和oct中只能選一,它們是相互排擠的)。在用成員函數setf和掌握符setiosflags設置輸入格局狀況後,假如想改設置為同組的另外一狀況,應該挪用成員函數unsetf(對應於成員函數self)或resetiosflags(對應於掌握符setiosflags),先終止本來設置的狀況。然後再設置其他狀況,年夜家可以從本法式中看到這點。法式在開端固然沒有效成員函數self和掌握符setiosflags設置用dec輸入格局狀況,但體系默許指定為dec,是以要轉變為hex或oct,也應該先用unsetf 函數終止本來設置。假如刪去法式中的第7行和第10行,固然在第8行和第11行頂用成員函數setf設置了hex和oct格局,因為未終止dec格局,是以hex和oct的設置均不起感化,體系仍然以十進制情勢輸入。

同理,法式倒數第8行的unsetf 函數的挪用也是弗成缺乏的。

3) 用setf 函數設置格局狀況時,可以包括兩個或多個格局標記,因為這些格局標記在ios類中被界說為列舉值,每個格局標記以一個二進位代表,是以可以用位或運算符“|”組合多個格局標記。如倒數第5、第6行可以用上面一行取代:
    cout.setf(ios::internal I ios::showpos);  //包括兩個狀況標記,用"|"組合

4) 可以看到:對輸入格局的掌握,既可以用掌握符,也能夠用cout流的有關成員函數,兩者的感化是雷同的。掌握符是在頭文件iomanip中界說的,是以用掌握符時,必需包括iomanip頭文件。cout流的成員函數是在頭文件iostream 中界說的,是以只需包括頭文件iostream,不用包括iomanip。很多法式人員覺得應用掌握符便利簡略,可以在一個cout輸入語句中持續應用多種掌握符。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved