b98902HW 板


LINE

: (1)scanf在讀入字串的時候會不會在最後放下'\0'? : (2)用一個char array配迴圈讓getchar()讀入字元,那最後會不會放下'\0'? 不會 如果會的話反而會變得很恐怖 →迴圈竟然能知道停的時候看到getchar()就要在後面補'\0',這造反了這 : (3)gets要讓他停應該是NULL嗎?(第四次小考我寫了!=NULL獲得了AC,但是這邊失敗了) : (4)上文提到的scanf不會捨棄回車符(enter)根據我實驗的結果printf還是要\n才換行 : 如果(1)成立的話表示最後enter space tab 都會變成中斷點'\0'的意思嗎? 這問題有點複雜,因為問題本身搞混了一些東西 首先第一句話裡的,scanf不會把enter捨棄是沒錯,但這跟printf沒有關係呀 程式不可能自動把stdin(標準輸入)裡的東西塞到stdout(標準輸出)去 再來,不是linefeed space tab這些東西"變成"中斷點,是因為是用字串格式(%s)去讀 scanf遇到%s的時候會自動在字串後面補'\0',這兩個乍看很像但完全不一樣 把這個問題和本篇一開始提到的狀況整個重說一次 scanf會依照指定格式去解析input,並且做適當的處理和儲存 除了%c以外,其他的format通常都會把space characters忽略(' ', '\n', '\t'這類) 但他忽略的只忽略必要的,還沒讀到的不會去處理他 例如,我有一串input "aa_bb_123\n" 底線表示空白 當我用scanf("%s%s")去讀這個input的時候,首先第一個%s直接對應到aa,沒有問題 這時候input剩下"_bb_123\n",注意,第一個空白還在 這時候處理到第二個%s,scanf首先抓到開頭的空白,但因為現在要讀的是%s這個格式 所以這個空白就被忽略掉,scanf繼續往後找,找到bb 同樣的,這時候input剩下"_123\n",緊接在bb之後的空白仍被保留了 這時候如果用%s或%d去讀,都會對應到123,並且input留下"\n" 但如果是用%c去讀的話,scanf會把%c讀進去,並且留下"123\n" 所以,scanf並不是特別保留換行字元,而是他match到哪就讀到哪,其他的都保留 然而,gets()跟scanf不一樣,他是讀到'\n'就停,並且不保留'\n' 所以如果input是"abc\n",gets()讀進"abc" 同樣的如果input只有"\n",gets()只會讀進一個空字串"" 但注意,空字串""和NULL是不一樣的 空字串是一個長度為0的字串,但實際上再記憶體中還是會佔一個byte,也就是一個'\0' 而NULL就代表真的啥都沒有 所以原po一開始遇到的問題沒那麼複雜 純粹是因為輸入檔的第一行最後的換行字元被scanf保留下來 而緊接著的gets()遇到這個換行字元後就馬上停止,只讀進一個空字串這樣 -- We know. The time of joy will pass again someday. Then, fresh wind blows. It treasures that is happy. too, to be sad, too. Let's repeat it eternally, and live, and go!! maybe happy... --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.218.127
1F:推 ckclark:XD 11/09 04:20
2F:→ mimi9126:贏了... 11/09 04:25
3F:推 rex6608kevin:(跪)請受小弟一拜,非常感謝 11/09 09:14
4F:推 rex6608kevin:那麼我是不是應該手動去清除這個換行? 11/09 09:47
5F:→ mimi9126:是的,反正不管用什麼方式把那個換行字元讀掉就好 11/09 10:11
6F:推 cwahbong:還有一個方法式全用gets(),再使用sscanf... 11/09 10:24
7F:推 cwahbong:這樣不管遇到什麼格式都比較好處理 11/09 10:25
8F:推 davll:注意不要把scanf與gets混用,如有需要就照樓上的方法 11/09 12:29







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP