程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++中常用的二維數組的建立與文件的操作方法

C++中常用的二維數組的建立與文件的操作方法

編輯:C++入門知識

廢話不多說,先講C++一般如何創建二維數組的,這種方法是裡面填什麼數都可以,動態的。
[cpp]
int **M=new int*[hang]; //初始化行 
for(int i=0;i<hang;i++) 

 M[i]=new int[lie];//初始化列,到了這裡已經成功初始化數組了 
 for(int j=0;j<lie;j++)//這裡開始給二維數組的每一個賦值 
 { 
  cin>>M[i][j]; 
 } 

上面就是這麼一個過程,當然初值的賦值不一定要自己在命令行模式下輸入。可以利用文件的方式,來輸入。


下面介紹文件的輸入輸出操作。

基礎知識:文件操作流 fstream 有兩個子類:ifstream 和 ofstream ,ifstream默認以輸入方式打開文件,而ofstream默認以輸出方式打開文件。不過我們可以在構造的時候添加打開的模式(mode),也可以先

1、先說ofstream把程序(內存)裡面的東西輸出到文件(輔存)吧。

[cpp]
ofstream outfile("DATA.txt"); 
if(!outfile)return -1; 
outfile<<"hello file!";   www.2cto.com
輸出到文件,輸出文件的目錄是你的C源程序的目錄。當然你也可以用下面那種方式輸出:

[cpp] 
ofstream outfile; 
outfile.open("DATA.txt"); 
if(!outfile)return -1; 
outfile<<"hello file!"; 


如果你想輸出文件到一個絕對地址,例如D盤目錄下,你把那個 DATA.txt 改為 D:\\DATA.txt ,記住是兩個斜槓啊。前面一個是轉義用的。如果你想把默認的輸出方式改變,你可以利用下面的模式,來改變。

 ios::in   打開一個輸入文件,用這個標志作為ifstream的打開方式,以防止截斷一個現成的文件
 ios::out   打開一個輸出文件,當用於一個沒有ios::app、ios::ate或ios::in的ofstream時,ios::trunc被隱含
 ios::app   以追加的方式打開一個輸出文件
 ios::ate   打開一現成文件(不論是輸入還是輸出)並尋找末尾
 ios::nocreate   僅打開一個存在的文件(否則失敗)
 ios::noreplace   僅打開一個不存在的文件(否則失敗)
 ios::trunc   如果一個文件存在,打開它並刪除舊的文件
 ios::binary   打開一個二進制文件,缺省的是文本文件
上面是從C/C++的一些庫裡面找到的,下面再給出一些。

ios::in = 0x01, //供讀,文件不存在則創建(ifstream默認的打開方式)
ios::out = 0x02, //供寫,文件不存在則創建,若文件已存在則清空原內容(ofstream默認的打開方式)
ios::ate = 0x04, //文件打開時,指針在文件最後。可改變指針的位置,常和in、out聯合使用
ios::app = 0x08, //供寫,文件不存在則創建,若文件已存在則在原文件內容後寫入新的內容,指針位置總在最後
ios::trunc = 0x10, //在讀寫前先將文件長度截斷為0(默認)
ios::nocreate = 0x20, //文件不存在時產生錯誤,常和in或app聯合使用
ios::noreplace = 0x40, //文件存在時產生錯誤,常和out聯合使用
ios::binary = 0x80 //二進制格式文件

 

無論構造,還是open,後面都可以加模式選擇。以構造器為例:

[cpp] 
ofstream outfile("DATA.txt",ios::out|ios::trunc); 
用了兩種模式,要知道其實這兩種模式就是兩個8位數,通過“位或”可以把他們連起來用。
使用完畢,要關閉文件,outfile .close()  就可以了。

 

2、再說用ifstream把文件(輔存)裡面的東西輸入到程序(內存)裡面吧。

 下面是一個 DATA.txt 的文件內容:

[plain] 
hello file! 
Hi David! 
寫了三行。然後通過下面程序,就可以把這東西輸出到屏幕:

[cpp]
int main() 
{   
  string s;  
  ifstream infile("DATA.txt",ios::in); 
    if(!infile)return -1; 
    while(infile)  
    { 
    //istream& getline ( istream& is, string& str ); std裡面的  
    getline(infile,s);//Get line from stream 
    cout<<s<<endl; 
    } 
    infile.close();  

輸出結果是:

[plain]
hello file! 
Hi David! 
 
請按任意鍵繼續. . . 

 

 下面把DATA.txt改一下,解決我們文章一開始提到過的問題,不用命令行模式輸入數據,用文本方式。下面是DATA.txt內容:

[plain]
12     33  44 
22  463   93 
 63    48  9 
好,下面寫程序,把文件裡面的東西傳進數組裡面。然後屏幕輸出。

[cpp] 
#include<iostream>   
#include<fstream>  
#include<iomanip> // 因為使用了setw()語句,設置位寬的。  
using namespace std; 
int main() 
{   
   int num=3; //這個num自己也可以到控制台輸入,程序現在不打算弄這個功能。  
   int **M=new int*[num]; //初始化行 
   ifstream infile("DATA.txt",ios::in);//初始化文件操作  
   if(!infile)return -1;//創建失敗就返回錯誤  
     
   for(int i=0;i<num;i++) 
   { 
    M[i]=new int[num];//初始化列,到了這裡已經成功初始化數組了 
    for(int j=0;j<3;j++)//這裡開始給二維數組的每一個賦值 
     { 
      if(infile) infile>>M[i][j];//infile中讀取數值,有空格就停,游標一直往下走下去  
      cout<<setw(5)<<M[i][j]; //設置位寬為5,輸出到屏幕  
     } 
    cout<<endl; // 輸出一行後換行  
   } 
   infile.close();  //關閉文件  

輸出結果:

[plain] 
12    33   44 
22   463   93 
63    48    9 
意鍵繼續. . . 
上面是一個格式化的輸出哦~~位寬一定,為5,好看多了。這東西你可以再寫進文件裡面,哈哈~~


 

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