C++iostream詳解

一、iostream簡介

iostream是C++標準庫中的重要組成部分,用於在C++程序中進行輸入輸出操作。其中,i代表輸入,o代表輸出,而stream代表了數據流。它是面向對象的,內置了一些底層操作,使得我們可以更方便地進行文件和控制台的輸入輸出操作。

二、iostream的基礎操作

iostream底層使用了緩存機制,所以我們需要使用flush來將緩存中的數據輸出到終端中,同時為了保證終端窗口中數據的雙向通信,需要在每次輸出完畢後使用endl來結束一行語句並刷新緩存。

#include <iostream>
using namespace std;
int main()
{
  int num = 125;
  cout << "num的值為:" << num << endl;
  cout <> in_num;
  cout << "輸入的整數是:" << in_num << endl;
  return 0;
} 

三、iostream的高級操作

iostream還支持對文件操作的輸入輸出。我們可以利用fstream頭文件中的ifstream和ofstream來分別實現文件的讀取和輸出。在打開文件時,需要使用open()函數將文件名和打開方式一起傳入。讀取文件時,使用getline()函數可以逐行讀取文件中的內容。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
  ofstream outfile;
  outfile.open("test.txt", ios::out);
  outfile << "hello world!" << endl;
  outfile.close();
  ifstream infile;
  infile.open("test.txt", ios::in);
  string s;
  if(infile.is_open()){
    while(getline(infile, s)){
      cout << s << endl;
    }
  }
  infile.close();
  return 0;
}

四、iostream的格式化操作

iostream支持多種格式化操作,如setw()函數可以設置輸出數據欄位的寬度,setprecision()函數可以設置輸出小數的精度等。

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
  double pi = 3.1415926535;
  cout << "不設置精度:" << pi << endl;
  cout << "設置精度為3:" << setprecision(3) << pi << endl;
  cout << "欄位寬度為10:" << setw(10) << pi << endl;
  return 0;
}

五、iostream的異常處理

iostream能夠捕獲並處理輸入輸出的異常。例如,如果我們想要輸入一個整數,但用戶輸入了一個非法字元,則會拋出異常並終止程序。我們可以使用try-catch語句來處理異常,並將程序的控制權交還給用戶。

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
  try{
    int num;
    cout <> num;
    cout << "輸入的整數是:" << num << endl;
  } catch(ios_base::failure &ex){
    cout << "輸入的不是整數!" << endl;
  }
  return 0;
}

六、iostream的運算符重載

我們可以在自己的類中重載iostream的輸入輸出運算符,實現對象在控制台中的輸入輸出。例如,我們可以在一個名為Score的類中重載運算符<>,以實現該類在控制台中的輸入輸出。

#include <iostream>
using namespace std;
class Score{
  public:
    Score(){}
    Score(int a, int b){
      math = a;
      english = b;
    }
    friend ostream& operator<<(ostream& os, Score& sc)
    {
        os << "Math: " << sc.math << " English: " <>(istream& is, Score& sc)
    {
        cout<> sc.math >> sc.english; 
        return is;
    }
  private:
    int math;
    int english;
};
int main()
{
  Score x;
  cin >> x;
  cout << x << endl;
  return 0;
}

七、iostream的綜合運用

下面是一份iostream的綜合運用代碼示例,包括了文件寫入、讀取、格式化輸出等內容。程序將讀取txt文件中的成績單信息,並將每個學生的平均分輸出到txt文件中。我們同時還可以看到如何使用點操作符、異常處理和重載運算符等高級特性。

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
class Student{
  public:
    string name;
    int math, english;
    Student(){}
    Student(string n, int m, int e){
      name = n;
      math = m;
      english = e;
      average = (m + e) / 2;
    }
    double getAverage(){
        return average;
    }
    friend ostream& operator<<(ostream& os, Student& sc)
    {
        os << setw(10) << sc.name;
        os << setw(8) << sc.math;
        os << setw(8) << sc.english;
        os << setw(10) << setprecision(3) << sc.average <>(istream& is, Student& sc)
    {
        is >> sc.name >> sc.math >> sc.english;
        if (is.fail()) {
            throw ios_base::failure("無效的輸入!");
        }
        sc.average = (sc.math + sc.english) / 2.0;
        return is;
    }
  private:
    double average;
};
int main()
{
  ifstream infile;
  infile.open("grades.txt", ios::in);
  ofstream outfile;
  outfile.open("result.txt", ios::out | ios::trunc);
  outfile << "name\t math\t english\t avg" <> s){
    try{
      outfile << s;
    } catch (const ios_base::failure &ex){
      cerr << ex.what() << endl;
    }
  }
  outfile.close();
  infile.close();
  return 0;
}

原創文章,作者:LOUJK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/360359.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LOUJK的頭像LOUJK
上一篇 2025-02-24 00:33
下一篇 2025-02-24 00:33

相關推薦

  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • MPU6050工作原理詳解

    一、什麼是MPU6050 MPU6050是一種六軸慣性感測器,能夠同時測量加速度和角速度。它由三個感測器組成:一個三軸加速度計和一個三軸陀螺儀。這個組合提供了非常精細的姿態解算,其…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Java BigDecimal 精度詳解

    一、基礎概念 Java BigDecimal 是一個用於高精度計算的類。普通的 double 或 float 類型只能精確表示有限的數字,而對於需要高精度計算的場景,BigDeci…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25

發表回復

登錄後才能評論