很開心哈!困擾我很長時間的一個檔案流的問題解決鳥!
問題源於英語老師讓我幫忙給全班同學根據學號排序,然後把名單給她。一百來號人就這樣給我人
工排序了!虧我還是學電腦滴!!!
現在來貼下My Code:
#include<fstream>#include<iostream>#include<string>using namespace std;struct node //學號、姓名{long s_id;char name[30];}date[43];inline void bubble_sort() //根據學號從小到大,冒泡排序{int i,j;node temp;for(i=0;i<43;i++){for(j=42;j>i;j--){if(date[j].s_id<date[j-1].s_id){temp.s_id=date[j].s_id;strcpy(temp.name,date[j].name);date[j].s_id=date[j-1].s_id; strcpy(date[j].name,date[j-1].name);date[j-1].s_id=temp.s_id;strcpy(date[j-1].name,temp.name);}}}}inline void read_write() //檔案讀寫{int i;ifstream infile;ofstream outfile;infile.open("C:\\Users\\Lenovo\\Desktop\\學號排序\\a.txt",ios::in);outfile.open("C:\\Users\\Lenovo\\Desktop\\學號排序\\b.txt",ios::out);if(!infile.is_open() || !outfile.is_open()){cerr<<"open error!"<<endl;exit(1);}for(i=0;i<43;i++)infile>>date[i].s_id>>date[i].name;bubble_sort();for(i=0;i<43;i++)outfile<<date[i].s_id<<" "<<date[i].name<<endl; infile.close();outfile.close();}int main(){ read_write();return 0;}
排序前的 a.txt:
排序後的 b.txt:
(註:問題,文檔中內容沒能全部截下來,但已可以說明程式的正確性啦。)
代碼就以43人為準啦。(小秘密:這是一班的人數,美女也最多)
在寫代碼的過程中還是有幾點要注意的:
①如前所說,這個問題我很早就遇到了,當時剛接觸C++,老師也不講檔案流這一部分。自己感覺
有點難了,也就擱置了!只想說:學習要抓緊點滴。不能有點難就不做啦。
②寫的過程也非一番風順的。
問題一:把 "C:\\Users\\Lenovo\\Desktop\\學號排序\\a.txt" 這個檔案路徑寫成 "C:\Users\Lenovo\
Desktop\學號排序\a.txt" 。結果用is_open()函數發現檔案老是打不開!費了很長時間才找到這個問題。關
鍵是很多教輔書也都是錯誤寫法!!!
問題二:把上一個問題改對了之後,還有一個更讓人無語的問題才漸漸浮出水面。我把自己電腦
設定成“隱藏副檔名”,結果老是打不開檔案!改過來之後才可以滴。我覺得電腦幾乎無所不能,關鍵
你要給出正確設定。系統越漸龐大,互相影響。個人覺得早晚是個問題。
後感:bug讓人痛苦,debug了,又覺得一切值得。
歡迎拍磚!