Scanf
在標准C中,scanf提供了鍵盤輸入功能。
scanf函數是一個標准庫函數,它的函數原型在頭文件“stdio.h”中。與printf函數相同,C語言也允許在使用scanf函數之前不必包含stdio.h文件。scanf函數的一般形式為:
scanf(“格式控制字符串”, 地址表列);
其中,格式控制字符串的作用與printf函數相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表列中給出各變量的地址。地址是由地址運算符“&”后跟變量名組成的。
Scanf_s
在VS2019,包括以前的一些版本中,scanf會報錯:

這時我建議使用Scanf。
ANSI C中沒有scanf_s(),只有scanf(),scanf()在讀取時不檢查邊界,所以可能會造成內在泄露。所以VS中提供了scanf_s(),在調用時,必須提供一個數字以表明最多讀取多少位字符。
當然這里報錯你也可以依據網上提供的修改宏或者修改一些VS配置來直接運行。
但是scanf不會檢查邊界,讀取一旦越界,數據就會存儲到其他地址空間,運行就會報錯,這里很麻煩。
所以建議使用scanf_s().
在循環中使用scanf_s();

這是順序表實現中的一段代碼。如圖所示,如果你想使用循環輸入,需要在scanf_s前面加上fflush(stdin)方法清除緩存區或者在scanf_s方法下面加getchar()方法。
這是因為scanf_s返回值中的回車所造成的。
這里放一張錯誤樣例的截圖:

可以看到,這里點擊回車后直接跳過一次輸入。
注:由於未知原因,我這里使用fflush(stdin)失效。如果遇到同樣問題可以嘗試getcar().