linux系統和windows系統的EOF快捷鍵
今天在學習的時候被下面這段程式碼給折騰了將近一個小時,結果問題還沒解決,最後還是求助師兄幫忙找出問題原因,尷尬至極…
#include <iostream>
#include <fstream>
#include <limits>
using namespace std;
int main(void){
fstream str;
int num;
str.open("num.txt",ios::out);
if(!str.is_open()){
cout << "檔案開啟失敗!" << endl;
return 1;
}
while(1){
int n = 0;
//**linux系統下**
cout << "請輸入一個整數[**ctrl+d**退出]:";
/**/windows系統下**
// cout << "請輸入一個整數[**ctrl+z**退出]:";
cin >> num;
if(cin.eof()){
break;
}
while(cin.fail()){
cin.clear();
cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
cout << "請重新輸入:" ;
cin >> num;
}
str << num << "\t";
if(++n % 10 == 0){
str << endl;
}
}
str.close();
return 0;
}
**程式目的:**重複輸入數位,並將數位儲存至檔案,要求每行最多隻能有10個數位。
(這本來是個很簡單的程式,結果忽略了linux系統和windows系統的快捷鍵的差別結果在這個坑裡爬了一個小時…)
這段程式碼在vs上執行是正常的,但linux系統的終端下執行就有問題了:輸入的數位沒有寫入檔案!!!
問題現象:
問題原因:
就是因為這個坑,導致了資料不能寫入檔案!!!
原因解析:
ctrl + z:是windows系統下的檔案結束符EOF的快捷鍵;
在linux系統下該快捷鍵的作用是將當前執行的程式掛起!!!
ctrl + d:才是linux系統下的EOF快捷鍵!!!
自我總結:
1,遇到問題,思維不夠發散,太固化,容易找不到問題點,老是在一個方向上思考,不懂得換個方向思考問題。
2,基礎知識掌握不夠牢固,全面。