1. 程式人生 > >輸入資料需換行時不可用scanf("%c",a[i]),用scanf("%c",a+i)

輸入資料需換行時不可用scanf("%c",a[i]),用scanf("%c",a+i)

從鍵盤拍入的內容,在 “鍵盤緩衝區”,當拍了 Enter 鍵(平時喊它回車鍵)時,鍵盤 緩衝區 的內容 才被 送到 “輸入緩衝區”。 scanf() 讀數時 是到 “輸入緩衝區” 取數,“輸入緩衝區” 沒內容 時,scanf() 等待。 scanf("%c",a+i) 這種格式,它在緩衝區 取單個字元,空格鍵也好,tab 鍵也好, Enter 鍵, 字母鍵也好,數字鍵也好,遇到什麼 取什麼。並不跳過 “空白” 所以,輸入緩衝區 有 a白b白c白d回車時,它讀入的 4 個 字元 是: a 白 b 白 反序 輸出 就 沒有 得到 預期要 的 結果。 scanf("%s",a+i) 這種格式,讀入字串,它以空白為分隔 符。 輸入緩衝區 有 a白b白c白d回車時, 它讀入的 4 個 字串 是 "a" "b" "c" "d", 依次 存放地點 是 a[i], 即a[0],a[1],a[2],a[3]. 雙引號括起的叫字串,例如 "a", 它實際上 含2個字元,一個是 a, 另一個是 字串結束符 '\0'. 由於你連續輸入,存放地點只移動了1 格,所以 讀入 a[1] 時,a[1] 蓋去了輸入 a[0]時的 字串結束符 '\0', 同樣,a[2],a[3] 蓋去了輸入 a[1],a[2] 時的 字串結束符 '\0', char a[100] 裡的實際內容 變 "abcd"。 這樣 你 反序 輸出 就 得到 預期要 的 結果。 如果 用 scanf(" %c",a+i) 輸入格式,它會自動 以空白 為 輸入資料 分隔符, 拍入 a白b白c白d回車時,它會得到 abcd 。 這樣 你 反序 輸出 也能 得到 預期 的 結果。