thì chắc bả cho làm quen với input output

Xử lý mấy cái này nếu hiểu thì dễ lắm.
lúc nhập dữ liệu vào từ bàn phím / file / string v.v... thì dữ liệu được tải vào 1 buffer tạm thời. Với dữ liệu đọc từ bàn phím thì mỗi lần bấm enter dữ liệu sẽ được flush (như đi ị ị xong nhấn nút quặng cầu thì nó quặng đi hết =) ) vào buffer này.
vd: nhập " a1 2ab 3" (8 ký tự) rồi enter thì buffer sẽ được đẩy vào 9 ký tự (8 ký tự + ký tự newline) " a1 2b 3\n", và con trỏ đọc của buffer trỏ vào ký tự đầu tiên ' '
bây giờ gọi std::cin >> n; sẽ peek() (đọc ký tự đó nhưng ko trích ra khỏi buffer) 1 ký tự trong buffer:
- nếu ký tự đó là khoảng trắng: nếu chưa đọc được gì vào n thì gọi hàm get() để trích bỏ ký tự khoảng trắng đó đi, còn đọc số vào n rồi thì dừng
- nếu ký tự đó là chữ số, gọi hàm get() để trích và chép vào n.
- nếu ký tự đó là dấu trừ thì tùy vào dữ liệu của n có cho phép có dấu hay ko sẽ nhớ là bỏ dấu âm (nếu chưa đọc vào số nào) hoặc dừng và set error flag là failbit (nếu đã đọc vào số rồi mà gặp dấu '-' ngang xương).
- còn lại thì nếu chưa đọc số nào vào n thì dừng và set error flag là failbit, còn đọc rồi thì chỉ dừng thôi ko báo lỗi.
sơ sơ là vậy...
" a1 2b 3\n" trong buffer sẽ được trích ra ' ' và dừng ở 'a', set failbit lên cin. Khi này muốn xài cin thì phải clear() flag lỗi của nó và ignore hết ký tự trừ khoảng trắng ra. Gọi while (!isspace(in.get())) { } sẽ làm: trích 'a', trích '1', trích ' ', dừng vì đã tìm được ký tự trắng. Tới dây thì con trỏ đọc của buffer trỏ vào '2'.
Gọi cin >> n; lần nữa sẽ trích '2' vào n, rồi dừng tại 'b'. n có giá trị là 2 và cin state là good. Có xem đây là trường hợp lỗi ko thì tùy @.@ Ta xem là lỗi. Dùng peek() để nhòm vào ký tự hiện tại của cin, thấy nó là 'b' khác ký tự trắng nên ta sẽ xem là lỗi, đọc bỏ hết ký tự ko phải ký tự trắng: trích 'b', trích ' ', dừng vì đã tìm đc khoảng trắng (nhưng khoảng trắng này vẫn bị trích ra). Con trỏ đọc của buffer trỏ vào '3'.
Gọi cin >> n; lần nữa sẽ trích '3' vào n, rồi dừng tại '\n'. n có giá trị là 3 và cin state là good. peek thấy ký tự con trỏ buffer đang trỏ vào là '\n' cũng là ký tự trắng ==> hợp lệ. Trả về giá trị của n.
operator>> của std::istream được overload chỉ xài std::istreapeek(), std::istream::get() với hàm num_get::get (nếu là đọc số, hàm này phụ thuộc vào locale, nếu thích có thể chuyển locale để đọc 9,2 thay vì 9.2 cũng được) gì đó nữa. Chi tiết tại
http://www.cplusplus.com/reference/istream/istream/operator>>/