1. 程式人生 > >C++(筆記)檔案操作練習(流類庫與輸入輸出)

C++(筆記)檔案操作練習(流類庫與輸入輸出)

1、什麼叫做流?流的提取和插入是指什麼?I/O流在C++中起著怎樣的作用?

解:
流是一種抽象,它負責在資料的生產者和資料的消費者之間建立聯絡,並管理資料的流動,一般意義下的讀操作在流資料抽象中被稱為(從流中)提取,寫操作被稱為(向流中)插入。作業系統是將鍵盤、螢幕、印表機和通訊埠作為擴充檔案來處理的,I/O流類就是用來與這些擴充檔案進行互動,實現資料的輸入與輸出。

2、 cerr和clog有何區別?

解:
1.cerr 標準錯誤輸出,沒有緩衝,傳送給它的內容立即被輸出,適用於立即向螢幕輸出的錯誤資訊;
2.clog 類似於cerr,但是有緩衝,緩衝區滿時被輸出,在向磁碟輸出時效率更高。
3.快取區:就是你輸入一段資料或字元的時候是輸入到快取區中的

3、使用I/O流以文字方式建立一個檔案test1.txt,寫入字元“已成功寫入檔案!”,用其它字處理程式(例如windows的記事本程式Notepad)開啟,看看是否正確寫入。

#include <fstream.h>

void main() 
{
ofstream file1("test.txt");
file1 << "已成功寫入檔案!";
file1.close();
}

程式執行後test1.txt的內容為:已成功寫入檔案!

4、使用I/O流以文字方式開啟上一題建立的檔案test1.txt,讀出其內容顯示出來,看看是否正確。

#include <fstream.h>
void main() { char ch; ifstream file2("test.txt"); while (file2.get(ch)) cout << ch; file2.close(); }

程式執行輸出:
已成功寫入檔案!

5、使用I/O流以文字方式開啟上題建立的檔案test1.txt,在次此檔案後面新增字元“已成功新增字元!”,然後讀出整個檔案的內容顯示出來,看看是否正確。

#include <fstream.h>

void main() 
{
ofstream file1("test.txt",iOS::app);
file1 << "已成功新增字元!"
; file1.close (); char ch; ifstream file2("test.txt"); while (file2.get(ch)) cout << ch; file2.close(); }

程式執行輸出:
已成功寫入檔案!已成功新增字元!

5、定義一個dog類,包含體重和年齡兩個成員變數及相應的成員函式,宣告一個例項dog1,體重為5,年齡為10,使用I/O流把dog1的狀態寫入磁碟檔案,再宣告另一個例項dog2,通過讀檔案把dog1的狀態賦給dog2。分別使用文字方式和二進位制方式操作檔案,看看結果有何不同;再看看磁碟檔案的ASCII碼有何不同。

以兩種方式操作,程式執行結果一樣,但磁碟檔案的ASCII碼不同,使用二進位制方式時,磁碟檔案的ASCII碼為05 00 00 00 0A 00 00 00,使用文字方式時,磁碟檔案的ASCII碼為05 00 00 00 0D 0A 00 00 00,這是因為此時系統自動把0A轉換為了0D 0A。

#include <fstream.h>

class dog
{
public:
dog(int weight, long days):itsWeight(weight),
itsNumberDaysAlive(days){}
~dog(){}

int GetWeight()const { return itsWeight; }
void SetWeight(int weight) { itsWeight = weight; }

long GetDaysAlive()const { return itsNumberDaysAlive; }
void SetDaysAlive(long days) { itsNumberDaysAlive = days; }

private:
int itsWeight;
long itsNumberDaysAlive;
};

int main() // returns 1 on error
{
char fileName[80];

cout << "Please enter the file name: ";
cin >> fileName;
ofstream fout(fileName);
// ofstream fout(fileName,ios::binary);
if (!fout)
{
cout << "Unable to open " << fileName << " for writing./n";
return(1);
}

dog Dog1(5,10);
fout.write((char*) &Dog1,sizeof Dog1);

fout.close();

ifstream fin(fileName);
// ifstream fin(fileName,ios::binary);
if (!fin)
{
cout << "Unable to open " << fileName << " for reading./n";
return(1);
}

dog Dog2(2,2);

cout << "Dog2 weight: " << Dog2.GetWeight() << endl;
cout << "Dog2 days: " << Dog2.GetDaysAlive() << endl;

fin.read((char*) &Dog2, sizeof Dog2);

cout << "Dog2 weight: " << Dog2.GetWeight() << endl;
cout << "Dog2 days: " << Dog2.GetDaysAlive() << endl;
fin.close();
return 0;
}

程式執行輸出:
Please enter the file name: a
Dog2 weight: 2
Dog2 days: 2
Dog2 weight: 5
Dog2 days: 10

6、 觀察下面的程式,說明每條語句的作用,看看程式執行的結果。

#include <iostream>
using namespace ::std;

void main()
{
ios_base::fmtflags original_flags = cout.flags(); //1 
cout<< 812<<'|';
cout.setf(ios_base::left,ios_base::adjustfield); //2
cout.width(10); //3
cout<< 813 << 815 << '/n';
cout.unsetf(ios_base::adjustfield); //4
cout.precision(2);
cout.setf(ios_base::uppercase|ios_base::scientific); //5
cout << 831.0 ;

cout.flags(original_flags); //6
}

//1儲存現在的格式化引數設定,以便將來恢復這些設定;
//2 把對齊方式由預設的右對齊改為左對齊;
//3 把輸出域的寬度由預設值0改為10;
//4 清除對齊方式的設定;
//5 更改浮點數的顯示設定;
//6 恢復原來的格式化引數設定。

程式執行輸出:
812|813 815
8.31E+02

7、提示使用者輸入一個十進位制整數,分別用十進位制、八進位制和十六進位制形式輸出。

#include <iostream.h>

void main() {
int n;
cout << "請輸入一個十進位制整數:";
cin >> n;
cout << "這個數的十進位制形式為:" << dec << n << endl;
cout << "這個數的八進位制形式為:" << oct << n << endl;
cout << "這個數的十六進位制形式為:" << hex << n << endl;
}

程式執行輸出:
請輸入一個十進位制整數:15
這個數的十進位制形式為:15
這個數的八進位制形式為:17
這個數的十六進位制形式為:f

8、編寫程式實現如下功能:開啟指定的一個文字檔案,在每一行前加行號。

//b.cpp
#include <fstream.h>
#include <strstrea.h>
#include <stdlib.h>

void main(int argc, char* argv[])
{

strstream textfile;
{
ifstream in(argv[1]);
textfile << in.rdbuf();
}
ofstream out(argv[1]); 

const int bsz = 100;
char buf[bsz];
int line = 0;
while(textfile.getline(buf, bsz)) {
out.setf(ios::right, ios::adjustfield);
out.width(1);
out << ++line << ". " << buf << endl;
}
}

編譯後執行程式b text1.txt
執行前text1.txt的內容為:
aaaaaaaaaaaa
bbbbbbbbbbbb
cccccccccccc
dddddddddddd
eeeeeeeeeeee
ffffffffffff
gggggggggggg
hhhhhhhhhhhh

 執行後text1.txt的內容為:
1. aaaaaaaaaaaa
2. bbbbbbbbbbbb
3. cccccccccccc
4. dddddddddddd
5. eeeeeeeeeeee
6. ffffffffffff
7. gggggggggggg
8. hhhhhhhhhhhh

相關推薦

C++筆記檔案操作練習輸入輸出

1、什麼叫做流?流的提取和插入是指什麼?I/O流在C++中起著怎樣的作用? 解: 流是一種抽象,它負責在資料的生產者和資料的消費者之間建立聯絡,並管理資料的流動,一般意義下的讀操作在流資料抽象中被稱為(從流中)提取,寫操作被稱為(向流中)插入。作

C++ 學習筆記之——檔案操作檔案

1. 檔案的概念 對於使用者來說,常用到的檔案有兩大類:程式檔案和資料檔案。而根據檔案中資料的組織方式,則可以將檔案分為 ASCII 檔案和二進位制檔案。 ASCII 檔案,又稱字元檔案或者文字檔案,它的每一個位元組放一個 ASCII 程式碼,代表一個字元。 二進位制檔案,又稱內部格式檔案或位元

浙大《面向物件程式設計--java語言》學習筆記第八週:異常處理輸入輸出

8.1 異常 ArrayIndex.java package exception; import java.util.Scanner; public class ArrayIndex { public static void main(String[] args) { // TO

C++入門筆記檔案操作

前言 此文是FishC大佬第四堂課的內容小結,學到了很多,來總結一下。 檔案操作 C語言版本 利用C語言編寫一個檔案複製的程式,如下所示。 #include <stdio.h> #include <stdlib.h> int main( int ar

10-8日上課簡記簡單資料型別輸入輸出

第二章 資料型別與簡單的輸入/輸出 1.簡述C語言程式碼風格 問題:求兩個整數的和。 #include<stdio.h> int main() { int i,j,sum; scanf("%d%d",&i,&j); sum=i+j; printf("%

《80X86匯編語言程序設計教程》十九 操作系統指令輸入輸出保護

.html 影響 輸出 lsp use com 之間 自己的 操作數 1、 通常只在操作系統代碼中使用,80386支持4個特權等級,操作系統指令也可分3種:實模式和任何特權級下可執行指令、實模式及特權級0下可執行的指令和僅在保護模式下執行的指令。   1) 實模式和任何

PHP學習筆記--檔案操作

下面通過一些簡單示例帶你瞭解PHP的檔案操作。 1、開啟及關閉檔案 resource fopen  ( string $filename  , string $mode  [, bool $use_include_path  = false 

檔案是資料位元組的抽象-為什麼C++中會把檔案操作抽象為fstream?

這不過是返祖罷了。正確的問題是為什麼會把資料流抽象成檔案。   裝置-位元組流-檔案。 一切皆為檔案,所有不同種類的型別都被抽象成檔案(比如:塊裝置,socket套接字,pipe佇列)。   檔案抽象為資料流一定程度上是 Unix 造成的。 傳統上,計算機上用

C++ Primer Plus學習筆記輸入輸出錯誤處理、檔案輸入輸出

1. 字元函式庫 cctype cctype是字元函式庫,用於判斷是否為大寫字母、標點符號、空格等 #include<cctype> char ch; isalpha(ch)//如果ch是字母,返回非零值,否則返回0 ispunct(ch)/

C語言入門二十五檔案操作

檔案操作 一、標準檔案的讀寫1.檔案的開啟fopen() 檔案的開啟操作表示將給使用者指定的檔案在記憶體分配一個FILE結構區,並將該結構的指標返回給使用者程式,以後使用者程式就可用此FILE指標來實現對指定檔案的存取操作了。當使用開啟函式時,必須給出檔名、檔案操作方式(讀

linux學習筆記檔案操作命令

1.rm 命令 使用:rm [引數] 檔案 功能:刪除檔案 常用引數:          -v :顯示執行過程 -i:進行互動式的刪除 -r:遞迴的刪除檔案或目錄 如果rm命令不跟上-r則不能刪除目錄檔案 使用例項: rm -r v    /var/test 刪除var目錄

C語言基礎之常用檔案操作2附程式碼

這裡在上一章的基礎上再介紹幾個常用的檔案操作的函式,包括fprintf、fscanf、ftell、fseek等。 檔案操作函式介紹 1、fprintf 函式 函式原型: int fpringf(FILE* stream,const char *forma

C++Primer筆記——文本查詢程序原創,未使用

primer color lease NPU 一個 mes getline line 筆記 1 #include <iostream> 2 #include <vector> 3 #include <set> 4

C#學習筆記-域用戶認證

byte name urn validate finally tostring code date geb public Boolean ValidateDomainUser(string Domain, string UserName, string

C++ Primer Plus章節編程練習第七章

str volume play 其中 mes enter 顯示 計算公式 latin 1、編寫一個程序,不斷要求用戶輸入兩個數,直到其中的一個為0,對於每兩個數,程序將使用一個函數來計算它們的調和平均數,並將結果返回給main(),而後者將報告結果。調和平均數指的是倒數平均

C++ Primer Plus章節編程練習第十章

amp formal main.c one 取出 賬戶 form ios oid 1、為復習題5描述的類提供方法定義,並編寫一個小程序來演示所有特性。   復習題5:定義一個類來表示銀行賬戶。數據成員包括儲戶姓名、賬號(使用字符串)和存款。成員函數執行如下操作   ~創建

node總結之檔案操作系列

接著上一篇部落格來啊,咱們繼續看非同步模式下關閉檔案的語法格式: fs.close(fd, callback) 引數描述如下: fd - 通過 fs.open() 方法返回的檔案描述符。 callback - 回撥函式,沒有引數。 例項如下: var

node總結之檔案操作系列

Node.js 提供一組類似 UNIX(POSIX)標準的檔案操作API,我們來看下Node 匯入檔案系統模組(fs)語法,如下: var fs = require("fs") Node.js 檔案系統(fs 模組)模組中的方法均有非同步和同步版本,例如讀取檔案內容的函式有非同步的 fs

Matlab從入門到精通--檔案操作

檔案的開啟 fopen函式的呼叫格式為: fid= fopen(檔名,開啟方式) 其中檔名用字串形式,表示待開啟的資料檔案。常見的開啟方式有:‘r’表示對開啟的檔案讀資料,‘w’表示對開啟的檔案寫資料,‘a’表示在開啟的檔案末尾新增資料。fid用於儲存檔案控制代碼值,控制代

QT學習檔案操作

一、MainWindow設定 1.    設定視窗內容 視窗包含選單欄、工具欄、主視窗內容和狀態列。 新建QTextEdit或者其他視窗內容(如 spreadsheet等),然後將之放置視窗中間。     tex