[問題] 讀字元的問題!!

看板C_and_CPP (C/C++)作者 (SuperEel)時間16年前 (2009/07/07 15:52), 編輯推噓4(4012)
留言16則, 3人參與, 最新討論串1/1
不好意思~~小弟還是新手 在此請教一下各位大大 #include<stdio.h> #include<stdlib.h> int main(void){ char motion[4],be[4]; printf("請輸入運作模式:"); scanf("%s",&motion); getchar(); printf("請輸入移動模式:"); scanf("%s",&be); printf("%c%c%c%c %c%c%c%c",motion[0],motion[1],motion[2],motion[3],be[0],be[1],be[2],be[3]); system("pause"); return 0; } 為啥我程式這樣打 第一個scanf所讀到的第一個字元會不見呢? 還有........ 倒數第三行的部分 可以用比較簡單的方式寫嗎??? 感覺我這樣寫好像很麻煩><" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.41.76.143

07/07 16:02, , 1F
倒數第三行的部分寫法我解決了...但是我發現printf印出
07/07 16:02, 1F

07/07 16:02, , 2F
來的東西跟原來一樣少了第一個字元!!為什麼呢?
07/07 16:02, 2F

07/07 16:10, , 3F
你用scanf讀入的字串長度有多長??也有4個字母??
07/07 16:10, 3F

07/07 16:11, , 4F
那你可能陣列空間不夠讓你放char string結束字元'\0'
07/07 16:11, 4F

07/07 16:13, , 5F
我剛試了一下 你把be字串多宣告一格試試看
07/07 16:13, 5F

07/07 16:14, , 6F
而且我不太懂要用getchar的原因
07/07 16:14, 6F

07/07 16:15, , 7F
用getchar();可以避免scanf少讀一格
07/07 16:15, 7F

07/07 16:16, , 8F
應該是為了吃掉\r\n中的\n吧....@_@"
07/07 16:16, 8F

07/07 16:17, , 9F
be多宣告一格就可以了耶@@"但為什麼呢???
07/07 16:17, 9F

07/07 16:18, , 10F
scanf不是會直接跳過\n嗎? 囧 用C++習慣了 忘記scanf..
07/07 16:18, 10F

07/07 16:22, , 11F
雖然我確定cin.get()有這種問題我還記得..
07/07 16:22, 11F

07/07 16:24, , 12F
猜的, 因為在Windows下會有\r\n兩個char才湊成換行....
07/07 16:24, 12F

07/07 16:25, , 13F
抓數字無所謂, 抓%s或%c就有可能被這留下來的一個卡著.
07/07 16:25, 13F

07/07 16:39, , 14F
所以要抓字元的話都要多給一個空間就是了~感謝大大
07/07 16:39, 14F

07/07 17:00, , 15F
是要抓字串的話, 需要多給一個char放'\0'(字串結束)
07/07 17:00, 15F

07/07 17:01, , 16F
如果一個一個字元抓(%c)抓剛好, 是可以不用多一個空間的
07/07 17:01, 16F
文章代碼(AID): #1AKlwoMx (C_and_CPP)
文章代碼(AID): #1AKlwoMx (C_and_CPP)