2013-02-23 58 views
1

當我使用系統(「暫停」),然後一行「按任意鍵繼續...」出現在屏幕上。系統(「暫停」)澄清

這是無意識的,使讀取輸出很麻煩。

有什麼方法可以阻止它來?

+0

改爲使用'std :: cin.get()'。 – Rapptz 2013-02-23 10:10:23

回答

5

您的意思是您想要按任意鍵繼續,但不顯示屏幕上的「按任意鍵繼續」?試試這個getchar();這將捕獲一個字符從鍵盤輸入並繼續。

+0

+1這個答案很簡單,非常好。我的轟鳴聲只是爲了幫助「澄清」。按照這裏建議的方式使用'getchar()'。 – 2015-11-30 05:29:49

3

假設您在Windows上,請將system("pause")替換爲system("pause > NULL")

+0

謝謝,很高興知道您可以將程序的輸出傳遞給Windows上的空設備! :) – Wookie88 2013-02-23 10:15:10

0

該行是system("pause")的一部分。您可以嘗試不同的方法,例如getline(std::cin, variable)cin.get()

5

而不是使用平臺相關system("pause")可以使用獨立於平臺的std::cin.get(),如果緩衝與它搞亂,你可以使用:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n') 

手之前清除緩衝區。

+0

將cin.get()直接從控制檯讀取charachter沒有緩衝區? – IcyFlame 2013-02-23 11:57:06

0

首先,你應該從來沒有使用system("pause"),因爲它是危險的。您的代碼無緣無故將調用外部系統過程;並且一個破解者可以找到一種方法將「暫停」命令替換爲另一個命令,使得您的程序可以用您的用戶權限調用另一個程序。

這就是說,你可以避免將消息發送到null設備。

  • 在Windows上:

    暫停> NUL

如果你想大膽地讓這個可怕的系統調用隨身攜帶,隨處使用:

  • 在linux上:

    echo Pres任何關鍵要繼續......;閱讀X

現在你可以將OR(邏輯連接詞)同時,使一個系統調用,在這兩個系統的工作原理:

void pause(void) 
{ 
    system("echo Press any key to continue . . . && (read x 2> nul; rm nul || pause > nul)"); 
    return; 
} 

Linux會創建一個臨時名爲「nul」的文件,因爲它無法識別此關鍵字。 linux上的null設備是/dev/null,而不僅僅是nul。之後,該命令將使用rm nul刪除此臨時文件。所以如果你碰巧在同一個目錄下有一個名爲nul的文件,應該警告這個命令對你不好(因爲另一個原因)。

該命令模仿原文。如果你想避免這個消息,只要刪除它的echo Pres...部分。


加成:

  • 清除終端屏幕便攜使用system? (不,不要出於同樣的原因做它的危險。)但是對於測試的目的,你可以使用:

system("cls||clear");


避免pause。 C是一種語言,是目前最強大的語言之一。我確信有一種方法可以僅使用C(例如getchar()scanf())來製作pause

0

使用

system("pause>nul") 

它完美的Windows!

+0

嗨Aayush。你很晚纔回答這個問題。你能告訴讀者你的答案比已經提供的答案好嗎? – 2017-05-29 17:09:42