C語言問題,關於Scanf的,空格問題

時間 2023-03-08 12:40:08

1樓:網友

scanf("%c",&answer) 與 scanf(" c",&answer),後者只是在%前多了個空格,似乎沒有什麼區別,但使用起來區別是很大的。

scanf()作單字元輸入時規定只接收乙個字元,但它卻把回車符也作為字元對待的。這就造成程式中只有乙個輸入字元的scanf()語句時,問題還不大,但如果後面還跟著第二個scanf()字元輸入語句,這個scanf()就把前面輸入的回車符當作輸入字元了。這就在輸入邏輯上造成了混亂,達不到人們預期的願望。

有了這個空格,這個空格就相當於要求輸入乙個空格,剛好把剛才的''接收掉。之所以' '能接收'',是因為"%c...中的空格是廣義的,對『'、t'都有效。

而且實踐證明,這個空格放在%c後面也不能達到目的。應當說,這也是比較巧妙的應用!

2樓:匿名使用者

除了三樓說的,建議樓主以後乙個scanf就針對乙個變數。否則兩個變數之間用空格或者逗號隔開,輸入的時候也需要輸入空格或逗號。同時在輸入char型時注意,之前最後一次使用scanf或printf的時候,如果你使用了回車作為。

3樓:育知同創教育

scanf("%d",&c)中不應該出現在""中,scanf的""裡只放格式字串(帶%,如%d),其餘的字元需要原樣輸出。

c語言用如何用scanf輸入帶有空格的字串

4樓:匿名使用者

c語言中scanf()函式提供的「%[格式串可以用來進行多個字元的輸入,並對結束符進行自定義。 對於%還可以用^+任意字元(包括 eof)來結束字串的輸入,如%[^eof]就是直到有eof 輸入,字串才中止。

void main()

5樓:香夢沉酣

你可以採用gets();函式輸入,空格也算在內的。輸入對應的是puts();要使用這個函式標頭檔案裡面只需新增#include .如果對你有用,望。

6樓:love永遠一號

你就用gets(字串陣列名),別忘了#include

7樓:細雨在微笑

換個方法,不要吊死在一顆(函)樹啊!

8樓:網友

這也有如何用s輸入帶入空格的字串,這個問題很很。很專業。

9樓:初巨集義

你可以在上直接輸入c語言,就有相應的答案。

10樓:網友

剛查了下,是可行的。已經有人問過了,你自己搜尋下scanf 空格。

c語言scanf函式格式問題

11樓:寒寒家

首先明確。

1. 對於%d的輸入,會忽略之前的空格。

2. 對於%c的輸入則不會忽略。

3. 對於%d的輸入,會被字元截斷,這也就是 輸入"10a20b"的時候,也不會錯的原因了。

正確答案是a

x1接收了10, y1接收了字元a,之後是乙個空格,而輸入的是%d,所以會忽略空格,所以x2接收了20,y2接收了字元b

分下下其它的選項。

b, x1 接收了10, y1接收了空格,錯誤c 錯誤同b

d x1接收了10, y1接收了a,x2接收了20,y1接收了空格。

12樓:網友

scanf從緩衝區讀取的時候不是依據空格的,讀整數就取乙個整數,讀字元就取乙個字元。

所以是a,比如c,讀取整數10之後讀到空格,會將空格當做字元放到y1中。

最好的辦法就是寫程式跑一下,下面是程式和結果#include

#include

#include

#include

#include

using namespace std;

int main()

c語言的scanf接收到底是忽略空格還是不忽略呢?

13樓:匿名使用者

舉幾個例子,或許你就對這個函式理解了,由於一般都是用這兩個字元控制輸入的,所以只討論空格回車的情況。

1.輸入資料為非char型別的情況:

int a, b;

scanf("%d%d",&a,&b);

此時的輸入方式可以是1空格2

或者1空格空格。。2

或者1回車2

或者1回車回車。。2

此時可以得出結論,scanf接收不但忽略空格還忽略回車。

int a, b;

scanf("%d,%d",&a,&b);

此時的輸入方式可以是1,空格2

或者1,空格空格。。2

或者1,回車2

或者1,回車回車。。2 (只需要保證1緊接著逗號就行,隨便奇葩的輸入都正確)

此時可以得出結論,scanf接收不但忽略空格還忽略回車,但是在有逗號的情況下必須遵循一定的格式,否則出錯。

2.再看輸入資料為char型別的情況:

char a, b;

scanf("%c%c",&a,&b);/或者scanf("%c,%c",&a,&b);

此時的輸入只能按格式來,不會忽略任何字元。

就說這麼多了,可能你考慮的比較多,我有沒說到的,若有疑問可以提出來一起討論下。

14樓:普通村民熊吉

複製貼上一大堆全是廢話,scanf("%c",&c)時,接受空格,其他時候忽略空格。

15樓:匿名使用者

scanf()函式接收輸入資料時,遇以下情況結束乙個資料的輸入:(不是結束該scanf函式,scanf函式僅在每乙個資料域均有資料,並按回車後結束)。

① 遇空格、「回車」、「跳格」鍵。

② 遇寬度結束。

③ 遇非法輸入。

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

16樓:愛佳佳的恐龍

如果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就接受了空格,明白了沒?這個可以防止誤操作,忽略空格輸入,接受第乙個非空格輸入。

17樓:黑白say晚安

加空格遮蔽了空白字元。

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

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

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

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

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

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

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

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

18樓:西西哩的小馬甲

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

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

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

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

19樓:圈圈叉叉叉叉圈

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

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

比如scanf(" c" ,c);

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

20樓:夏天很冷

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

21樓:湮魂

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

22樓:我要度百

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

關於c語言的scanf函式的逗號問題

對於scanf 函式,如果格式控制串裡有逗號 或其他非格式符號 鍵盤輸入時,必須嚴格按照控制串的內容鍵入,不能隨意輸入。如scanf a d,b d a,b 響應輸入是a xx,b xx xx是整形數 scanf 函式還有一個特點較為常用,該函式會將白字元 空格 作為資料間的分隔符,比如scanf ...

c語言scanf的兩個問題

對於 123abc789 回車 是因為你的輸入控制格式,兩邊是 d,即整數,中間三個是字元。因此輸入的時間是將123賦值給了a,abc分別賦值給bcd,789賦值給d 對於 123 回車 abc789 回車 首先必須知道,利用scanf輸入的時間,回車是作為有效的字元輸入的這樣其實是a 123,b ...

關於c語言的問題,關於C語言的問題

鷹弈 1 有定義 int n 0,p n,q p 則以下選項中,正確的賦值語句是 d a.p 1 b.q 2 c.q p d.p 5 解 p為一級指標,其中p為指標的地址,q為二級指標,其中 q為指標的地址,只能給變數或指標變數賦值,不能給地址賦值,所謂地址,就是由acs碼構成,簡單的說,就是每個人...