2010-03-18 89 views
2

我需要完成與.NET Console.ReadLine函數提供的相同的行爲。程序執行應該在用戶按回車鍵時繼續。C - 相當於.NET Console.ReadLine

以下代碼是不充分的,因爲它需要額外的輸入:

printf ("Press Enter to continue"); 
scanf ("%s",str); 

任何建議?

+0

我想你已經通過詢問ReadLine功能而困惑了這個問題,但只需要實際讀取一個字符;因此各種答案。我曾使用Console.ReadKey() – Clifford 2010-03-19 14:16:16

回答

5

你可以用fgets(),像這樣:

#include <stdio.h> 

fgets(buf, sizeof(buf), stdin); 
2

使用函數getchar()

+0

獲取單個字符,而不是一行。 Perrhaos你的意思是獲取()但這是一個危險的函數,應該使用fgets()來代替。 – Clifford 2010-03-18 20:48:35

+0

@Clifford,OP確實展示了一個用戶按下單個鍵(例如[enter])的例子...... – 2010-03-19 02:05:52

+0

啊!我正在解決實現Console.ReadLine()功能的要求。我現在明白你的觀點。 – Clifford 2010-03-19 14:11:04

2

試試這個:

printf ("Press Enter to continue"); 
scanf(「%[^\n]「,str); 
0

getline在大多數情況下比getchar可能會更好。它允許您在「回車」之前捕獲所有用戶的輸入,並且不會受到緩衝區溢出的影響。

char *buf=NULL; 
printf("Press enter to continue: "); 
getline(&buf,0,stdin); 
// Use the input if you want to 
free(buf); // Throw away the input 
+0

你說的get()而不是getchar()只能從標準輸入中得到一個字符。請注意,getline()是標準庫的GNU擴展。 C++有一個類似的istream :: getline()和:: getline()函數不會混淆。在ISO C中,使用fgets()。 – Clifford 2010-03-18 20:47:38

+0

@Clifford:'getchar'將對任何*字符進行響應,而不僅僅是輸入。現在,這可能是OP的意圖,它會*工作,但這不是他要求的。但是我的問題是,如果用戶沒有注意到它有點脆弱(即他們忘記提示即將到來並開始輸入下一個命令,'getchar'立即吃掉第一個字符,這樣終端不會暫停,並且他們的下一個輸入是主要字符)。是的,'fgets'是c標準,但是現在'getline'是POSIX的一部分,而不僅僅是一個GNU的東西了。 – dmckee 2010-03-18 21:07:33

+0

啊!我正在解決實現Console.ReadLine()功能的要求。我現在明白你的觀點。儘管getchar()不受緩衝區溢出的影響,並且stdin在行緩衝區中,但在按下ENTER之前不會返回。 – Clifford 2010-03-19 14:10:38

0

你可以使用scanf函數做什麼。

do{ 
    scanf("%s",str1); 
}while(str1[0] == '\0' || str1[0] == '\r' || str1[0] == '\n'); 
+1

請勿在帖子中加入簽名。特別是不包含鏈接的鏈接。您可以在個人資料中執行此操作。 – Glorfindel 2017-01-09 10:43:16