我需要完成與.NET Console.ReadLine函數提供的相同的行爲。程序執行應該在用戶按回車鍵時繼續。C - 相當於.NET Console.ReadLine
以下代碼是不充分的,因爲它需要額外的輸入:
printf ("Press Enter to continue");
scanf ("%s",str);
任何建議?
我需要完成與.NET Console.ReadLine函數提供的相同的行爲。程序執行應該在用戶按回車鍵時繼續。C - 相當於.NET Console.ReadLine
以下代碼是不充分的,因爲它需要額外的輸入:
printf ("Press Enter to continue");
scanf ("%s",str);
任何建議?
你可以用fgets(),像這樣:
#include <stdio.h>
fgets(buf, sizeof(buf), stdin);
試試這個:
printf ("Press Enter to continue");
scanf(「%[^\n]「,str);
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
你說的get()而不是getchar()只能從標準輸入中得到一個字符。請注意,getline()是標準庫的GNU擴展。 C++有一個類似的istream :: getline()和:: getline()函數不會混淆。在ISO C中,使用fgets()。 – Clifford 2010-03-18 20:47:38
@Clifford:'getchar'將對任何*字符進行響應,而不僅僅是輸入。現在,這可能是OP的意圖,它會*工作,但這不是他要求的。但是我的問題是,如果用戶沒有注意到它有點脆弱(即他們忘記提示即將到來並開始輸入下一個命令,'getchar'立即吃掉第一個字符,這樣終端不會暫停,並且他們的下一個輸入是主要字符)。是的,'fgets'是c標準,但是現在'getline'是POSIX的一部分,而不僅僅是一個GNU的東西了。 – dmckee 2010-03-18 21:07:33
啊!我正在解決實現Console.ReadLine()功能的要求。我現在明白你的觀點。儘管getchar()不受緩衝區溢出的影響,並且stdin在行緩衝區中,但在按下ENTER之前不會返回。 – Clifford 2010-03-19 14:10:38
你可以使用scanf函數做什麼。
do{
scanf("%s",str1);
}while(str1[0] == '\0' || str1[0] == '\r' || str1[0] == '\n');
請勿在帖子中加入簽名。特別是不包含鏈接的鏈接。您可以在個人資料中執行此操作。 – Glorfindel 2017-01-09 10:43:16
我想你已經通過詢問ReadLine功能而困惑了這個問題,但只需要實際讀取一個字符;因此各種答案。我曾使用Console.ReadKey() – Clifford 2010-03-19 14:16:16