Vs中scanf的使用問題
在使用Vs2017的過程中,scanf函數是C語言中的輸入函數,在我使用的過程中出現了以下幾個小問題:
(一)針對scanf(“”)函數,在雙引號出現的所有文字,符號(包括標點)都需要在控制臺輸入的時候一模一樣,否則將會產生error;
1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() { 4 int a,b; 5 scanf("%d,%d", &a, &b); 6 printf("a=%d,b=%d", a, b); 7 system("pause"); 8 }
此問題的出現恰恰是雙引號中的符號,文字等不一致造成的,在程序中scanf中用的是英文的逗號,而我在控制臺輸入的是漢語的逗號,這就導致了b的值為負數
還有scanf函數的結束是以敲擊回車,結束並且換行的,所以在雙引號中加不加\n無所謂,註意加上是要在控制臺打出來,要不會出現以下情況; 按下回車後,光標下移,但是沒有輸出,切永無止境;
打下\n,則會產生輸出。
(二)、在我是用scanf的過程中,會出現閃退的情況,即剛剛鍵入完成,沒有看到輸出,控制臺就退出了;
解決方法:在開始位置加入 #include <stdlib.h> ,然後再main函數中加入 system("
之前查過使用printf不閃退的方法是 getchar();
完整代碼如下:
1 1 #include <stdio.h> 2 2 #include <stdlib.h> 3 3 int main() { 4 4 int a,b; 5 5 scanf("%d,%d", &a, &b); 6 6 printf("a=%d,b=%d", a, b); 7 7 system("pause"); 8 8 }
(三)、關於vs2017中的scanf函數的處理方法
參考百度經驗:http://jingyan.baidu.com/article/19020a0a39196e529d284239.html(行之有效)
① 如何解決: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.
<1>scanf 是相對於 printf 的逆過程,printf是向標準輸出流輸出,scanf則是從標準輸入流獲取數據,msdn的解釋如下:
<2>很多人在使用scanf的時候一來就會遇到如下的問題:
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.
<3>解決方法有兩個:
① 修改項目屬性:錯誤中提到的宏 _CRT_SECURE_NO_WARNINGS 添加到工程的項目屬性中,具體設置如下,這種設置方法只對當前的項目有效,如果其他的項目使用 scanf 還需要重新設置;
② 修改屬性管理器:是將錯誤中提到的宏 _CRT_SECURE_NO_WARNINGS 添加到屬性管理器中,具體設置如下,這種設置方法對所有的項目都有效,如果其他的項目使用 scanf 不再需要設置;
<4>使用快捷鍵Ctrl+F5運行後,出現了如下的錯誤:
<5>原因在於scanf 的參數需要傳遞的是變量的地址,而不是變量的值,獲取變量的地址的方式是在變量的前面加一個 & 符號,& 符號表示取地址的意思,修改scanf後運行效果如下:
<6>從使用上可以看出 scanf 函數,比 printf 函數更難用,更容易出錯
在vs2017裏面不適用&符號的error提示是
Vs中scanf的使用問題