c語言 用scanf s混合輸入int,float,char型變數怎麼會報錯

時間 2021-05-07 08:00:22

1樓:

好問題。

首先是太長不看環節。我在這裡給出正確寫法,以便題主直接複製貼上:

scanf_s

("a=%d,b=%d,c1=%c,c2=%c,x=%f,y=%f,z=%f",&

a,&b

,&c1,

1,&c2

,1,&

x,&y

,&z);

如果題主對原理不感興趣,可以跳過這一行之後的所有內容,直接關閉網頁/應用。

這是因為scanf_s函式對字元和字串格式有特殊的處理方式,以確保在讀取的字元個數超出緩衝大小時不會發生陣列越界。

既然題主使用Visual C++,那我們就看一下Microsoft Docs的說法:

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Unlikescanfandwscanf,scanf_sandwscanf_srequire you to specify buffer sizes for some parameters. Specify the sizes for allc,C,s,S, or string control setparameters. The buffer size in characters is passed as an additional parameter.

It immediately follows the pointer to the buffer or variable. For example, if you're reading a string, the buffer size for that string is passed as follows:

scanfwscanf不同,scanf_swscanf_s要求您為某些引數指定緩衝大小。要為所有cCsS或字串控制集合引數指定大小。以字元為單位的緩衝大小是作為附加引數傳遞的。

它緊跟在指向緩衝區或變數的指標之後。例如,如果您要讀取乙個字串,那個字串的緩衝大小按如下方式傳遞:

chars[

10];

scanf_s

("%9s",s

,(unsigned

)_countof(s

));// buffer size is 10, width specification is 9

//緩衝大小為

10,寬度指定為

9The buffer size includes the terminal null. You can use a width specification field to ensure the token that's read in fits into the buffer. When a token is too large to fit, nothing is written to the buffer unless there's a width specification.

緩衝大小包含結尾空字元。您可以使用寬度指定字段確保讀入的符號能容納進緩衝區。當符號過大而無法容納時,除非有寬度指定,否則沒有字元會被寫進緩衝區。

……The buffer size parameter describes the maximum number of characters, not bytes. ……

緩衝大小引數描述的是最大字元的個數,而不是位元組的個數。……

……This example reads a single character:

這個示例讀取單個字元:

charc;

scanf_s

("%c",&

c,1);

When multiple characters for non-null-terminated strings are read, integers are used for both the width specification and the buffer size.

當讀取非空字元結尾字串的多個字元時,整數同時用於寬度指定和緩衝大小。

charc[

4];scanf_s

("%4c",c

,(unsigned

)_countof(c

));// not null terminated

//非空字元結尾

總結:%c格式不但可以用來讀取單個字元,還可以用來讀取多個字元而不由空字元結尾。因此這個格式也是需要指定緩衝大小的。

那麼為了保證行為一致,在讀取單個字元時也有必要告訴函式,單個字元有1個字元的大小。

用c語言程式設計還是用Python好?

浪跡天涯學python 以為的經驗來說,取決你長期的目的,如果非程式設計師,只是解決一些工作的問題用python是最好的,簡單容易上手。而c語言更適合專業的程式設計師 愛吃花椒的小龍 看你用它幹嘛了,如果相對程式設計有完完全全的了解,就是c了,本科多年課程始終是它,學完之後雖然幹不了大專案 非精力 ...

學習c語言用什麼軟體?

WangKX visual studio 2019 community,跟上步伐學這個最新的。不懂看 c 新經典 裡面有詳細安裝步驟 除錯方法介紹。 cpp程式設計 這些都是比較常用的 1 visual c 6.0 win8系統下不好用,C C Mi crosoft Visual C 這個編譯器已經...

學C語言有什麼用?

小麵包 自己回答 學中文有什麼用?學英語有什麼用?學鳥語有什麼用?然後就知道答案了。你是學數學的,計算機的計算能力比你強不知道多少倍,你不學會計算機語言怎麼和計算機交流讓它幫你幹活?你不學英語,怎麼和老外溝通讓他知道你想幹什麼?兄帶,乙個人的力量是很有限的,我們需要語言來把各種人,各種力量結合在一起...