1. 程式人生 > >c++標準IO和檔案IO

c++標準IO和檔案IO

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <iomanip>

#include <fstream>//檔案讀寫標頭檔案

using namespace std;

int main()

{

char a;

char buf[256] = { 0 };

//下面一段程式碼表示從緩衝區中讀一個寫入變數a中

/*

while (1)

{

cin.get(a);

if (a != EOF)//EOF表示資料源無更多可讀資料,即讀完了,在我們鍵盤上EOF等價於ctrl+z

{

cout << a;

}

}

*/

//從快取區讀取256個字元到buf中,如果沒到256個,讀到\n結束,不會讀取\n

//整個的執行流程是:

//1.你輸入一個字串並按回車結束,這時你的緩衝區中是這一段字串加一個\n,因為cin.get()不論是哪種都遇回車結束,因此此時快取區中還留有一個\n

//2.當第二個cin.get()去讀取緩衝區的內容時,讀到的是\n,直接結束,因此第二個cin不會阻塞,這是需要用cin.ignore()函式去吃掉這個\n

cin.get(buf, 256);

cout << buf <<endl;

cin.ignore();//吃掉當前緩衝區的一個字元

//cin.ignore(2, '\n');//吃掉兩個字元,但如果到2個字元之前遇到\n,則自動結束,不再繼續吃字元

cin.getline(buf, 256);//讀取一行,讀256個,只讀到\n之前,不會讀取\n

cout << buf <<endl;

a = cin.peek();//只能寫成這種形式,讀取緩衝區的內容,並返回第一個字元,並不拿走,只是拷貝

if (a >= '0'&&a <= '9')

{

int number;

cin >> number;//很巧妙的用法,因為cin.peek()只是偷窺,並不是讀取,因此就相當於常規的標準輸入,cin與cin.get()不同,它會自動捨棄\n

cout << "您輸入的數字是:" << number << endl;

}

else

{

char buf[1024] = { 0 };

cin >> buf;

cout << "您輸入的字串是:" << buf << endl;

}

cout << "請輸入一個數字或字串:" << endl;

cin.get(a);

if (a >= '0'&&a <= '9')

{

cin.putback(a);//把cin.get取出來的重新放回緩衝區中

int number;

cin >> number;

cout << "您輸入的數字是:" << number << endl;

}

else

{

cin.putback(a);

char buf[1024] = { 0 };

cin >> buf;

cout << "您輸入的字串是:" << buf << endl;

}

//標準輸出流

cout.flush();//重新整理輸出流

cout.put('a').put('b').put('c') <<endl;//輸出字元'a','b','c'

//格式化輸出

int number = 10;

cout.unsetf(ios::dec);//寫在當前預設的10進位制輸出方式

cout.setf(ios::oct);//設定為八進位制輸出

cout.setf(ios::showbase);//顯式八進位制數錢的0和十六進位制錢的0x

cout << number << endl;

cout.unsetf(ios::oct);

cout.setf(ios::hex);

cout << number << endl;

cout.unsetf(ios::hex);

cout.setf(ios::dec);

cout << number << endl;

//也可以通過控制符進行格式化輸入輸出

cout << hex

<< setiosflags(ios::showbase)

<< number

<< endl;

/*

int u1 = 0x01020304;

char u2;

u2 = u1;

if (u2 == 1)

{

cout << "大端" << endl;

}

if (u2 == 4)

{

cout << "小端" << endl;

}

*/

//判斷資料大小端

//文字檔案讀寫

const char *sourceFileName = "C:\\Users\\ts\\Desktop\\source.txt";//windows下路徑為反斜槓,需要把一個反斜槓變為兩個,linux下路徑為正斜槓則不需要變為兩個

ifstream ism(sourceFileName, ios::in);//只讀方式開啟檔案,從檔案中輸入到流中

ofstream osm("C:\\Users\\ts\\Desktop\\target.txt", ios::out | ios::app);//只寫方式開啟檔案

//下面兩段程式碼的寫法也是可以的

//ifstream ism;

//ism.open(sourceFileName, ios::in);

if (!ism)//本質是重寫了!符號,類物件ism取反為真則表明檔案開啟失敗

{

cout << "原始檔開啟失敗" << endl;

}

if (!osm)

{

cout << "目標檔案開啟失敗" << endl;

}

char buf1[1024] = { 0 };

while (ism.getline(buf1, 1024))//把讀出的內容存放在程式的變數buf1中,讀到沒資源可讀時會返回EOF,即為假

{

//總結:

//標準IO時:

//cin.get(a)是讀\n的, cin.get(buf, 1024), cin.getline(buf, 1024)遇\n結束,遇到\n會直接結束,get()與getline()效果完全相同

//檔案IO時:

//ism.get(a)是讀\n的,ism.get(buf, 1024)遇\n結束,迴圈讀取只能讀一行,讀的資料不包含\n,ism.getline(buf, 1024)遇\n結束,但迴圈讀可以讀所有行,讀取每一行內容都不包含\n

cout << buf1 <<endl;

osm << buf1 << endl;//向osm物件寫入資料時,直接用<<操作符就可以,因為它的<<操作符被重寫了,且後面帶一個endl,即把\n也輸入進去,這樣就相當於完整的輸入一行的,且帶有\n

}

//ism.get(buf1, 1024);

//cout << buf1;

ism.close();

osm.close();

return 0;

}

相關推薦

c++標準IO檔案IO

#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <iomanip> #include <fstream>//檔案讀寫標頭檔案 using namespac

Linux系統程式設計:標準IO檔案IO的區別

首先了解下什麼是標準IO以及檔案IO。 標準IO:標準I/O是ANSI C建立的一個標準I/O模型,是一個標準函式包和stdio.h標頭檔案中的定義,具有一定的可移植性。標準IO庫處理很多細節。例如快取分配,以優化長度執行IO等。標準的IO提供了三種類型的快取。

java檔案io二進位制io

這學期開的演算法課,要用到檔案io操作,索性看了一下,下面就我的理解來介紹一下。 因為有關檔案,有必要說一下絕對檔名(absolute file name)和相對檔名 。 絕對檔名是由檔名和其完整路徑以及驅動器字母組成。例如:c:\book\Welcome.java 而Welcome.j

linux中的頁快取檔案IO

一篇比較好的關於頁快取的描述文章一篇比較好的關於頁快取的描述文章 雖然仔細看過《linux核心設計與實現》,也參考了很多的部落格,並且做了linux程序空間、address_space和檔案的關係圖(設為圖1,參考部落格),但是對於頁快取和檔案IO之間關係的細節一直不是特別明朗。趁著元旦假期看的

標準IO檔案IO[領卓教育]

1.定義   標準IO:標準I/O是ANSI C建立的一個標準I/O模型,是一個標 準函式包和stdio.h頭中的定義,具有一定的可移植性。標準IO庫處理很多細節。例如快取分配,以優化長度執行IO等。標準的IO提供了三種類型的快取。 (1)全快取:當填滿標準IO

C語言筆記、檔案io的操作

  一個自己定義的標頭檔案: 檔名為 xxx.h 內容: #ifndef _MYHEAD_H   #define _MYHEAD_H #include<stdio.h>#include<sys/types.h>#include<sys/st

DirectByteBuffer檔案IO詳解

java.nio 包裡,是java用於處理IO的新的API,它使用channel、select等模型,重新對IO操作進行了新的實現

blockingnon-blocking的區別 synchronous IOasynchronous IO的區別

nbsp 圖片 opera request multipl 並且 cal .com 但是 總結 blocking和non-blocking的區別 調用blocking IO會一直block住對應的進程直到操作完成,而non-blocking IO在kernel還準備數據的情

C++標準標準模板庫【轉】

(轉自:https://blog.csdn.net/rl529014/article/details/51154798) C++強大的功能來源於其豐富的類庫及庫函式資源。C++標準庫的內容總共在50個標準標頭檔案中定義。 在C++開發中,要儘可能地利用標準庫完成。這樣做的直接好處包括

C++標準標準模板庫

pan 設置 自動 斷言 tracking 主機 基本數據類型 tdd 臨時   C++強大的功能

C#複習——文字檔案

FileStream static void Main() { try { FileStream fs = new FileStream(@"C:\artists\log.txt", FileMode.OpenOrCreate, FileAccess.ReadWri

同步IO非同步IO、阻塞IO非阻塞IO

1、IO        IO (Input/Output,輸入/輸出)即資料的讀取(接收)或寫入(傳送)操作,通常使用者程序中的一個完整IO分為兩階段:使用者程序空

同步IO非同步IO

程式碼:VOID WINAPI APC_A ( DWORD dwError, DWORD cbTransferred, LPOVERLAPPED lpo ){  pTempInfo.push_back ( "執行IO_A的完成例程" ) ;}VOID WINAPI APC_B ( DWORD dwError,

C# 資料備份檔案備份

在系統使用一段時間可能由於某些原因需要將以前的資料和檔案備份到檔案 描述:將DB中的多個table 資料備份到Excel檔案並打包壓縮為zip,將需要備份的檔案打包壓縮Zip後刪除檔案 下面是使用DocumentFormat.OpenXml 和Microsoft.Practices的一個

C語言指標檔案

include<stdio.h> void main() { int *p; //*p是一個指標,定義的有地址但是是未知的 int a=3; p=a; //把a的地址p,這是不對的,因為p是未知的,雖然有地址,但不確定,因此不能直接和a劃等號 prin

總結一下mysql的隨機IO順序IO

mysql 資料最終都會刷到磁碟上去,刷盤分隨機IO和順序IO,兩者效能相差很大,大多情況下我們會改變一下設計使mysql 的隨機IO變為順序IO來提高效能,這裡說明下哪些是隨機IO,哪些是順序IO: 隨機IO: 寫資料檔案: ibd, MYD,MYI INNODB 資料檔

Java網路程式設計(三) java 流ioio

在 Java 的早期,JVM 在解釋位元組碼時往往很少或沒有執行時優化。這就意味著,Java 程式往往拖得很長,其執行速率大大低於本地編譯程式碼,因而對作業系統I/O 子系統的要求並不太高。 如今在執行時優化方面,JVM 已然前進了一大步。現在 JVM 執行位元組碼的速率已經接近本地編譯程式碼,藉助動態執行

非阻塞IO 阻塞IO

       非阻塞寫的情況下,是採用可以寫多少就寫多少的策略.與讀不一樣的地方在於,有多少讀多少是由網路傳送的那一端是否有資料傳輸到為標準,但是對於可以寫多少是由本地的網路堵塞情況為標準的,在網路阻塞嚴重的時候,網路層沒有足夠的記憶體來進行寫操作,這時候就會出現寫不成功的情況,阻塞情況下會盡可能(有可能被中

C 標準IO緩沖區內核緩沖區的區別

io緩沖區 lose 信息 同一文件 upload 同步 load IT 覆蓋 1.C標準庫的I/O緩沖區 UNIX的傳統 是Everything is a file,鍵盤、顯示器、串口、磁盤等設備在/dev 目錄下都有一個特殊的設備文件與之對應,這些設

C#:檔案IO操作 FileStream的用法 及 StreamReader StreamWriter的用法

1. FileStream 用法程式碼 static void Main(string[] args) { //memory : 記憶體 //Binary : 二進位制 String path = @"F:\ly\tes