1. 程式人生 > >Vs中scanf的使用問題

Vs中scanf的使用問題

解釋 取數 char clas 當前 ctrl+ 包括 管理器 標準

在使用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("

pause"); 即可保證不閃退;

     之前查過使用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的使用問題