對於C++編譯運行文件,我使用過兩個編譯器,一個是visual studio 2013,另外一個是devcpp,推薦使用devcpp。
vs的特點是界面整潔清晰,但是需要收費,這是微軟的,並且在電腦上的運行速度是非常慢的; 而devcpp的特點是界面比較簡陋,但是該軟件免費下載,運行速度快,軟件響應快。
例0.0:
這里介紹cin和cout對象的方法: cin.get()以及cout.put(),前者是將用戶的輸入獲取,返回獲取到的一個字符; 后者接受一個參數,返回值就是在控制台輸出這個字符。如下所示:
#include <iostream> using namespace std; int main() { char c; cout << "Input the words: " << endl; while ((c= cin.get()) != EOF) { cout.put(c); } cout << "That's the end!" << endl; return 0; }
這里就是將用戶輸入的依次獲取,並且輸出,知道判斷為EOF,則停止程序。結果如下:
例0.1
這里在介紹getline函數和read函數。
其中 getline函數的作用是從輸入流中讀取一行字符,其用法和上面將的get函數輸入一行字符的功能類似,如cin.getline();
而read函數可以從輸入流中讀取指定書目的字符並將他們存放在指定的數組當中,格式如下:
cin.read(char *buf, int size);
而eof函數是end of file的縮寫,表示文件結束。 如果讀取數據到達末尾,eof函數值為真,表示遇到文件結束符;eof函數值為假,表示沒有遇到文件結束符。
另外,peek函數的作用是從輸入流中返回下一個字符,但他只是觀測,指針仍然停留在當前位置,遇到流結束標志時返回EOF。 調用形式為: c= cin.peek();
而cin.putback函數作用是將前面用get或者getline函數從輸入流中讀取的字符ch返回到輸入流,插入到當前指針位置,供后面讀取。
例1:
如下所示,首先創建一個文件流對象,接着打開文件,進行輸入,最后關閉。 讀取文件內容與之相似。
#include <iostream> #include <fstream> using namespace std; int main() { cout << "this is the begining!" << endl; int n; double d; ofstream outfile; outfile.open("C:\\Users\\Administrator\\Desktop\\fileTest\\fileTest\\test.txt", ios::out); //outfile.open("./test.txt", ios::out); outfile << 50 << endl; outfile << 3.8 << endl; outfile.close(); cout << "successful!" << endl; ifstream infile("C:\\Users\\Administrator\\Desktop\\fileTest\\fileTest\\test.txt", ios::in); //ifstream infile("./test.txt", ios::in); infile >> n >> d; cout << n << "," << d << endl; infile.close(); return 0; }
這里絕對路徑使用“\\”是轉義后的結果,相對路徑暫未成功。
程序執行完畢,可發現內容為50 3.8,成功輸入。
例2
#include <iostream> #include <fstream> using namespace std; int main() { cout << "this is the beginning!" << endl; fstream outfile; outfile.open("C:\\Users\\Administrator\\Desktop\\fileTest\\fileTest\\test1.txt", ios::out); if (!outfile) { cout << "open failed!" << endl; exit(1); } outfile << "Hello world! \n"; outfile << "github ours github! \n"; outfile.close(); return 0; }
如果打開文件失敗,outfile返回0,則 exit(1)退出程序。
另外,注意 ios::out 這個實參必填。最后要 close 即可。
且如果沒有該文件可打開,則會自動創建文件,並完成后續輸入。
例3
#include <fstream> #include <iostream> #include <string> using namespace std; int main() { fstream outfile; outfile.open("C:\\Users\\Administrator\\Desktop\\fileTest\\fileTest\\test2.txt", ios::out); if (!outfile) { cerr << "open out failed !" << endl; exit(1); } outfile << "Hello world! \n"; outfile << "github! \n"; outfile.close(); char s[100]; fstream infile; infile.open("C:\\Users\\Administrator\\Desktop\\fileTest\\fileTest\\test2.txt", ios::in); if (!infile) { cerr << "open failed!" << endl; exit(1); } while (!infile.eof()) { infile.getline(s, sizeof(s)); cout << s << endl; } infile.close(); return 0; }
如上所示:我們先通過outfile輸入內容,然后使用infile讀取磁盤內容,infile.eof() 中eof即end of file,即如果不是file的最后一行,就繼續讀取文件,並且輸出。且每次在操作時,無論讀取,都需要進行打開文件已經關閉文件的操作。