C++ scanf的進偕用法
以下提幾個 scanf 較少見的技巧,確實不難,下面直接舉例說明。
0. 指定長度 %5s
配對時,最多只收長度為 5 之字串
char s[2000],g[200];
scanf("%5s%s", s, g);
printf("s=%s, g=%s\n", s, g);
1234567890
s=12345, g=67890
1. 指定字元配對 %[abz;]
配對時,只收 abz; 這四個字元
char s[2000],g[200];
scanf("%[abz;]%s", s, g);
printf("s=%s, g=%s\n", s, g);
az;abb;ABcdef123
s=az;abb;, g=ABcdef123
2. 指定字元配對 %[a-z ]
注意到,a-z 後面還有一個空白。配對時,只收 a-z 及空白鍵
char s[2000],g[200];
scanf("%[a-z ]%s", s, g);
printf("s=%s, g=%s\n", s, g);
abc xyz 123
s=abc xyz , g=123
3. 指定字元配對 %[a-zA-Z0-9]
配對 a~z, A~Z, 0~9
char s[2000],g[200];
scanf("%[a-zA-Z0-9]%s", s, g);
printf("s=%s, g=%s\n", s, g);
adzBWR0a8;das
s=adzBWR0a8, g=;das
4. 指定斷點字元 %[^,]
^ 即為斷點的意思,%[^,] 即為讀到 , 之前 (不含 ,) 之字串
char s[2000],g[200];
scanf("%[^,]%s", s, g);
printf("s=%s, g=%s\n", s, g);
ab,cd
s=ab, g=,cd
相似的,也有 %[^a-z]
5. 符號中間之文字 %[^@]@%[^.]
取得 @~. 之間之文字,不含 @ 與 .
char s[2000],g[200];
scanf("%*[^@]@%[^.]%s", s, g);
printf("s=%s, g=%s\n", s, g);
edisonx@pixnet.net.tw
s=pixnet, g=.net.tw
基本上,用上面的 [] 與 [^] 可做的事非常多,多練習應可達到不錯效果。
以上文章轉載於http://edisonx.pixnet.net/blog/post/74516127-%5Bc%26%2B%2B%5D-scanf-%E9%80%B2%E9%9A%8E%E7%94%A8%E6%B3%95
==========================================================================
vs2013 要使用scanf的方法
如果正常要使用scanf 會發生錯誤Compile error 或者出現以下訊息
error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\user\documents\visual studio 2013\projects\test\test.cpp 8 1 Test
解決
方法1.
加入
#define _CRT_SECURE_NO_WARNINGS
若不小心沒注意到資料量造成記憶體錯誤,可能在Linux就吐給你Segment Fault了
方法2.
用warning parama去關閉該warning
#pragma warning( disable : 4996 )
若不小心沒注意到資料量造成記憶體錯誤,可能在Linux就吐給你Segment Fault了
方法3.
若不小心沒注意到資料量造成記憶體錯誤,可能在Linux就吐給你Segment Fault了
方法4:
scanf_s("%s",str,SIZE)
scanf_s多了第三個參數是放置該陣列大小,以免溢出較scanf安全但sscanf_s等等增強安全性函式只有在Windows底下才支援
所以建議在撰寫時為了保持可移植性,還是遵照標準ISO
方法4:
直接透過編譯器在編譯時期用更安全的函式版本代換(也就是你寫scanf,其實在編譯時自己幫你換成scanf_s),則在程式碼前方
#define_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
也可參考http://danny50610.blogspot.tw/2014/11/visual-studio-community-2013-scanf.html 這網站有詳細的圖示