C語言無法正常使用scanf怎麼回事?

時間 2021-05-07 04:58:44

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...