1樓:
如果想在Visual C++ 2005及以上版本的編譯器使用scanf函式,需要在包含stdio.h之前定義_CRT_SECURE_NO_DEPRECATE巨集。
如果想使用scanf_s函式,需要知道這個函式對於字元和字串格式需要指定緩衝區大小。參見我以前寫的回答:
c語言用scanf_s混合輸入int,float,char型變數怎麼會報錯?
2樓:James Liu
scanf和scanf_s用法並不一樣。
在檔案頭部使用預編譯指令
#pragama warning (disable : 4996)就可以開心用scanf啦
3樓:韓馬拉
開啟專案屬性→C/C++→高階→禁用特定警告,填上4996就好了,這個專案都不會再顯示scanf錯誤
(授人以漁,底下的錯誤列表,點一下就鏈結到VS官方文件,有多種解決方法)
(題主這.cpp字尾真的離譜, .c字尾才是C語言)(VS的C語言實現只支援了C和C++語言的交集部分,可以參考:
/Za、/Ze(禁用語言擴充套件)
Microsoft C++ 語言一致性表
安裝clang編譯器工具vla之類的特性可以編譯,但編輯器照樣有紅波浪線 )
4樓:「已登出」
你用的是scanfs, 而不是scanf.
scanf_s是安全版本的scanf, 二者使用方法不一樣: CSDN-專業IT技術社群-登入, C語言中 scanf_s和 scanf 區別是什麼)
VS預設不允許使用scanf, 因為scanf使用不當會導致程式出現安全漏洞.
解決方法
(建議)允許使用scanf: VS2015使用scanf報錯解決方案 - wangduo - 部落格園
(不建議)使用scanf_s: CSDN-專業IT技術社群-登入
5樓:星辰
看你編譯器了,如果你使用的是微軟的vs編譯器(我就使用的是這款編譯器),它的c語言標準庫是有修改的,使用scanf會報錯如果想解決就要去專案屬性裡把sdl檢查關掉,如果想按微軟官方的辦法就是把scanf改成scanf_s,用法都一樣,只是加了s,s是safe的意思,這個是微軟官方重新定義的scanf,防止資料溢位什麼的,當然會更安全,但是也更麻煩,樓主可以換乙個,vs確實是寫c++的
6樓:這丸子
您使用的是VS編譯器嗎?要使用scanf_s,VS更新了,scanf變成scanf_s,語法上差別不大,只有字元型別輸入需要多乙個大小上限的引數
7樓:Schneider
VS自己的問題.加個
#define _CRT_SECURE_NO_WARNINGS就可以了
或者scanf寫成scanf_s
8樓:
大家都在建議不要用VS寫C語言,補充乙個例子好了:printf的格式串,VS2013 update5仍然不支援%zu格式,而我測試VS2019是支援的。如果權衡之下還是要用Visual Studio寫C,那麼請使用VS2019,比先前版本的Visual Studio的支援要更完善一些。
9樓:LFXuan
因為微軟的IDE用的編譯器是VC而不是標準C,所以編譯過程中會有一些問題,就比如說你遇到的scanf_s。如果只是用C的話,VS並不是很方便,而且微軟現在把重心都放在C++裡了。建議用codeblocks+mingw就不會出現這個問題了。
mingw就是windows版的gcc編譯器,也是標準C編譯器。或者給VS換乙個標準C編譯器試試?
10樓:Cgfyufsygsm
vs貌似都會這樣,他不希望你用scanf因為他覺得這不安全初學者用devcpp不香嗎
不行的話用vscode也行啊
vs是拿來開發工程用的,且對cpp支援更好,初學沒必要用vs
11樓:Unknownlemon
前幾天剛學C的時候也遇到了這個問題(跟題主同款書),我使用vscode編輯檔案時總是不成功,後來才發現是裡面scanf的鍋。我在vscode裡將終端改成cmd就可以了。題主檔案的字尾名是cpp,應該改成C的字尾名c。
我們學校vs全是2010版本的,於是乎,C11裡的scanf_s並無法使用。
12樓:
我錯了,scanf還是得加_s。。。。。。
――――――勉強算是分割線――――――
看了一圈,我決定還是得寫個回答。
1,visual studio 確實對C語言標準的支援不如GCC等編譯器。
2,如果非要用VS,你可以新建乙個空專案,然後新建檔案,字尾是.c,注意,不是.cpp。
經本人親身驗證VS2019完全沒問題。不會出現printf/scanf報錯的問題。不推薦C和CPP混寫。
3,C語言IDE個人推薦使用codeblocks。CPP還得是VS,宇宙無敵。
4,沒了。
13樓:matrix
不要用VS自帶編譯器學C語言。。。VS沒有完全實現C語言的標準。你可以用gcc或Clang編譯器,有條件的話最好用Linux或Mac學程式設計。
14樓:「已登出」
1、建議將檔案的字尾名改為.c,你的檔案的字尾名是.cpp。
2、我使用VS2017進行編譯,在scanf_s("%s",name)這一行編譯器會報警告。
3.程式的執行結果。
可以看到第乙個scanf 並沒有獲取到任何的輸入,輸入在第二個scanf.
個人建議,僅供參考。
15樓:Wolfie Wang
是VS編譯器的鍋。
VS缺省會對譬如scanf這類的函式提出安全警告,並且預設是不允許通過編譯的。
除了其他答案提到的方法之外,還有乙個等效操作是在檔案最開始(是最開始,包括#include這條語句)新增巨集定義
#define _CRT_SECURE_NO_WARNINGS這樣VS便不會再對scanf等函式進行安全檢查。
16樓:kite丶
emmm
第一,你用的是scanf_s
第二,如果想用scanf,請開啟測試-(你當前的專案名字)屬性-c/c++-sdl檢查是改成否
17樓:Terrell
標頭檔案包含錯了!
#include而不是#include
string是C++的標頭檔案。
scanf函式名寫的也不對啊,你好像寫的scanf_s。
c語言int陣列變數,通過scanf迴圈賦值,輸入3 5,自動執行,所有數值為3,請問為什麼?
悽臨雨 目前除了本答案,其他兩個答案全有錯 關鍵在於 d不接受 遇到.後scanf直接返回0表示讀取失敗,且 留在輸入緩衝區中,下一次迴圈繼續出錯。如何處理?1.用double變數 lf 給scanf。2.保證你的輸入正確,因此程式無需修改 3.先讀取一整行 字串 再從一行裡進一步讀取。includ...
c語言字元無法正常輸出,如何解決?
賠笑 用的Dev C 也出現過類似問題。解決方法是修改執行框字型為點陣字型 右鍵工作列 屬性 字型 點陣字型 結果正常,不能顯示的原因推測是有些字型中沒有這些特殊字元。 co lin 這涉及到ASCII碼的組成,大概分成兩部分 可列印字元 32 126,其中包括空格,數字,大小字母,標點符號等等。 ...
c語言scanf裡的變數,後者的格式控制符錯誤會影響前者嗎?
w2014 是c把b覆蓋掉了 也就是說對於0x12345678,在記憶體中是這樣放置的 0x78 0x56 0x34 0x12。然後,看起來,你的編譯器並沒有太操心對齊的事情 而是直接在棧上建立了這三個變數 c c b b b b a a a a 也就是說,讀進來a和b之後,是這樣的情況 c c 0...