2015-12-16 59 views
1

我必須接受用戶的輸入,並將其寫入到文件中,我使用fgets()的想法,以防止溢出,其中:用戶輸入和與fgets

while (fgets(line, sizeof line, stdin) != NULL) 
    fputs(line, file); 

這樣做的問題是,用戶有在空行輸入CTRL + Z,然後提交它以退出輸入,這可能看起來有點混亂。有沒有更簡單的方法來退出fgets()輸入?

其他方法呢?如果我用符號讀取符號,我可以實現一個退出字符,但用戶不能刪除輸入,這也是令人困惑的,所以我必須實施刪除算法,這會增加代碼的複雜度。

編輯: 用戶必須能夠在儘可能少的限制下在終端中輸入C代碼。

+0

像Linux上的字符一樣工作。也許你有一些奇怪的IDE或OS?而'fgets'不允許編輯。 'stdin'是一個字符流! – Olaf

+0

這個想法是能夠很容易地退出輸入(可能是一個特定的退出字符),我不能用fgets來做到這一點。 – user3604097

回答

2

爲什麼不使用輸入值本身來執行檢查?這樣,您將不需要任何特殊實現來標記輸入的結束。

要細說,如果你想使用一個空行標記輸入的結束,您可以檢查輸入緩衝區的第一個元素是等於換行來實現break條件,如

while (fgets(line, sizeof line, stdin) != NULL) 
    { 
      if (line[0] == '\n') 
      { 
        printf("end\n"); 
        break; 
      } 
       fputs(line, file); 
    } 

編輯:如果你想實現自己最終的輸入標記,你可以使用特定的標記來比較的第一個元素(或者,如果它是一個多字母的標誌,也許strcmp()與輸入)實施break

+0

這不允許空行,用戶可能希望有一個空行。 – user3604097

+0

@ user3604097我沒有注意到,作爲您的要求的一部分。 –

+0

我忘了提及它,但總體思路是讓用戶能夠在終端窗口中輸入C代碼。 – user3604097