為什麼執行scanf函式以格式s時時能輸入空格

時間 2022-02-06 20:25:13

1樓:

因為:%s格式讀入字串時,只有接收到\n時(假設字元陣列空間不收限制的話),才停止如入,因此以%s,%d讀入一個字串和一個整數時,一般不會得到預期的結果,這是因為逗號「,」被當作字串的一部分,所以整數必被接受為字串。解決的辦法是,用兩個scanf()函式分別讀入字串和整數。

2樓:

%s表示字串,也就是說用了%s之後,空格也被當成字串了。

所以如果要遇到空格就結束,請不要用%s引數。

3樓:代官

#include

#define maxnum 1000

void main()

}樓主 你的問題不是在忽悠人嗎 你試試這個輸入abc acb會輸出什麼?? 按你的意思說是輸出abc acb 你說這可能嗎?

用scanf只能錄入連續的字串,遇到空格就結束,如果你要把空格也吞了,推薦樓主用gets()就可把接收帶空格的字串,它遇回車才結束的。

4樓:雨暮柯城

就是文字形式,所以可以進行空格輸入。

5樓:落雷狂人

scanf是以行為單位結束的

6樓:匿名使用者

別誤人子弟啊,遇空格scanf("%s",s);也會停止,不止是'\n',不信的可以自己試下

c語言中用scanf函式輸入字元時,為什麼要在輸入控制符%c前面加空格?用scanf還有哪些要注意?

7樓:愛佳佳的恐龍

如果scanf中%d是連著寫的如「%d%d%d」,在輸入資料時,資料之間不可以用逗號分隔,只能用空白字元(空格或tab鍵或者回車鍵)分隔。

「2 (空格)3(tab) 4」 或 「2(tab)3(回車)4」等。若是「%d,%d,%d」,則在輸入資料時需要加「,」,如「2,3,4」。

比如scanf(" %c" ,&c);

你輸入了' a'(a前面有個空格),a就能被c接受。但控制符前如果沒空格,那c就接受了空格,明白了沒?這個可以防止誤操作,忽略空格輸入,接受第一個非空格輸入。

8樓:黑白say晚安

加空格遮蔽了空白字元。

%c前沒空格,scanf()將讀取標準輸入流中的第一個字元,%c前有空格,scanf()則讀取標準輸入流中第一個非空白字元。

使用scanf函式時應該注意的問題:

scan:掃描       f :format,格式1、整數和小數分別使用使用控制符%d %lf 表示(float除外,用%f)。

2、引數前面使用&符號,&號前要空格。

3、scanf輸入語句中替換符後不能加空格,也不能加\n。

4、scanf()中的變數必須使用地址。

5、scanf()的格式控制串可以使用空白字元或其它非空白字元,使用空白字元會使scanf()函式在讀操作中略去輸入中的一個或多個空白字元。使用非空白字元會使scanf()函式在讀入時剔除掉與這個非空白字元相同的字元。

6、在用"%c"輸入時,空格和「轉義字元」均作為有效字元。

9樓:西西哩的小馬甲

空格確實不是必須的,但有了空格就可以忽略你輸入的空格。

例如:scanf(" %c" ,&c),你輸入了' a'(a前面有個空格),a就能被c接受。

但控制符前如果沒空格,那c就接受了空格,這個可以防止誤操作,忽略空格輸入,接受第一個非空格輸入。

注意事項:

對於scanf()而言,%c是個較為特殊的說明符。 %c前沒空格,scanf()將讀取標準輸入流中的第一個字元,%c前有空格,scanf()則讀取標準輸入流中第一個非空白字元,遮蔽了空白字元。

10樓:圈圈叉叉叉叉圈

這絕對不是為了美觀,1樓不要誤人子弟。

空格確實不是必須的,但有了空格就可以忽略你輸入的空格,懂我的意思嗎?

比如scanf(" %c" ,&c);

你輸入了' a'(a前面有個空格),a就能被c接受。但控制符前如果沒空格,那c就接受了空格,明白了沒?這個可以防止誤操作,忽略空格輸入,接受第一個非空格輸入!

11樓:夏天很冷

空格不是必須的,scanf("%c %c",a,b)只是提示在輸入時兩個字元必須有空格間開。如果是scanf("%c%c",a,b)那沒兩個輸入字元不要有空格,不過程式設計時最好加上空格,這算一個書寫規範吧,要不然如果你scanf("%s%s",a,b)系統可能區分不了你的字串何時結束。

12樓:湮魂

不是必須加空格,這並不能防止誤輸入的,這種**寫出來,用的人肯定只能是熟知**如何編寫的人,有無空格分隔使用者會根據其格式使用,個人感覺就是為了能讓別人看清楚

13樓:我要度百

空格不是必須的吧,我們是感覺看起來美觀一些而加入的呀

用scanf函式時是不是回車是結束輸入,空格當做ascii接收?那什麼情況下會把回車接收,遇到空格不接收呢?

問一下c語言scanf的題 這道題為什麼不能用scanf輸入字串? 是根本就不可以,還是這題不行

14樓:

scanf函式使用%s格式輸入字串時,遇到空格則認為是輸入結束,後面的內容被忽略,這是語法規定

15樓:快先帶兒子走

當scanf讀字串的時候,空格是scanf的終止符,即讀到空格scanf函式就會結束

16樓:董潔舒

空格鍵是結束符的一種,用scanf函式是遇到空格結束 而gets()以回車結束字串中可以有空格

17樓:匿名使用者

這道題不可以。(這道題要求字串帶空格,scanf遇到空格就結束)

scanf什麼時候空格可以被讀?

18樓:匿名使用者

因為空格也屬於一個字元,而%c是字元型

19樓:匿名使用者

除了%c以外的說明符會自動跳過輸入項之前的空格,所以scanf(「%d%d」, &n, &m) 與scanf(「%d %d」, &n, &m) 的行為是相同的

然而現在存在%c,則%d%c%d%c首先從io stdin緩衝區讀取4個位元組到a

接下來由於%c不會跳過任何字元。所以讀一個' '到b由於接下來stdin緩衝區的內容是b,而scanf嘗試從緩衝區讀入一個整數,則scanf永遠不會跳過這個字元b,且ansi c要求scanf函式在第一個讀緩衝區錯誤的地方跳出,所以變數c、d被跳過

包括%s格式化也不能跳過空格

20樓:青澀草

空格是字元char。 輸入格式控制沒啥具體意義

c語言scanf函式格式問題

寒寒家 首先明確 1.對於 d的輸入,會忽略之前的空格 2.對於 c的輸入則不會忽略。3.對於 d的輸入,會被字元截斷,這也就是 輸入 10a20b 的時候,也不會錯的原因了。正確答案是a x1接收了10,y1接收了字元a,之後是一個空格,而輸入的是 d,所以會忽略空格,所以x2接收了20,y2接收...

當程式執行到scanf函式的時候直接跳過,不給我輸入的機會,然後執行結果輸出

聽不清啊 有二個地方必須要改一下 第一,read改為myread 共有3處 第二,switch a 要改為switch p include void myread int int main char i printf please input a number scanf d i myread i ...

為什麼在使用scanf 函式讀取十六進位制數時,不要輸入ox字首?有什麼影響嗎

0x之類的字首不只是給人看的,另一個作用是告訴編譯器這是什麼進位制的數,因為十進位制的123和十六進位制的123 用十進位制表示就是291 看起來是一模一樣的,但是由於scanf 函式已經知道了輸入的是十六進位制數,就不用再告訴它一遍了 我認為字首只是給人看的,方便閱讀者識別資料而機器中儲存的資料,...