第十四周專案4-2:IDE花括號換行機制
阿新 • • 發佈:2019-02-07
問題及程式碼:
/*
*Copyright (c)2015,煙臺大學計算機與控制工程學院
*All rights reserved.
*檔名稱:test.cpp
*作 者:陳文青
*完成日期:2015年6月18日
*版 本 號:v1.0
*
*問題描述:讀入一個C++程式,使程式中的所有左花括號“{”和右花括號“}”都單獨佔一行,新程式儲存到另一個.cpp檔案中,並在螢幕上顯示處理過的程式,顯示時加上行號。
*程式輸入:
*程式輸出:
*/
#include <fstream> #include<iostream> #include<cstdlib> using namespace std; int main( ) { //將檔案中的資料讀入到字元陣列中 ifstream sourceFile("source.cpp",ios::in); //以輸入的方式開啟檔案 if(!sourceFile) //測試是否成功開啟 { cerr<<"source code read error!"<<endl; exit(1); } ofstream outFile("newsource.cpp",ios::out); //以輸出的方式開啟檔案 if(!outFile) //測試是否成功開啟 { cerr<<"new source code write error!"<<endl; exit(1); } char ch1,ch2; //表示前後兩個字元 while(!sourceFile.eof()) { sourceFile.get(ch2); //花括號前沒有換行,新增換行符 if((ch2=='{'||ch2=='}')&&(ch1!='\n')) outFile.put('\n'); //花括號後沒有換行,新增換行符 else if((ch1=='{'||ch1=='}')&&(ch2!='\n')) outFile.put('\n'); outFile.put(ch2); //輸出當前讀入的符號 ch1=ch2;//ch1賦值為ch2的字元,ch2繼續向下讀取 } outFile.close(); sourceFile.close(); //加行號後輸出 cout<<"經過處理後的源程式是:"<<endl; char line[256]; int n=1; ifstream inFile("newsource.cpp", ios::in); //以輸入的方式開啟檔案 if(!inFile) //測試是否成功開啟 { cerr<<"file open error!"<<endl; exit(1); } while (!inFile.eof()) { inFile.getline(line,255,'\n'); cout<<n<<".\t"<<line<<endl; n++; } inFile.close(); return 0; }
執行結果:
知識點總結:
換行符和行號安排在一起可能會比較困難,所以將這兩個步驟分開進行,會使得程式設計起來更見簡便
在進行識別花括號的換行時,設定兩個字元型進行前後的識別