linux系統和windows系統的EOF快捷鍵**

2020-09-23 13:00:46

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,基礎知識掌握不夠牢固,全面。