Nào nào,
Tớ không ở đây để bới lông tìm vết, hay chỉ ra sự dốt nát của ai ở đây cả. Comment dưới đây chỉ cố gắng tổng hợp lại mọi thứ, cùng với một số lời khuyên tớ nghĩ là sẽ hữu ích cho sự nghiệp của cậu sau này.
Vì cuộc nói chuyện đang đi lệch hướng, để tớ quay lại từ comment đầu tiên của cậu nhé!
Comment dưới đây của cậu là lý do tớ đã reply để giúp cậu hiểu đúng này:
Thì theo cách hiểu của tớ,nếu lặp while kia chạy mà ta nhập thừa 1 tham số chương trình sẽ kết thúc. nên suy ra giống như hàm printf hàm scanf cũng sẽ trả về 1 giá trị kiểu int biểu diễn cho số lượng tham số ta nhồi vào hàm scanf đó.
Chữ in đậm kể trên là false assumption, và là lý do chính tớ reply cậu. Khi cậu nhập thừa 1 tham số, scanf trong ví dụ của cậu, vẫn sẽ trả về tối đa là 2 thôi.
Tớ sẽ không đi chi tiết giải thích tại sao nó trả về 2 khi cậu nhập 3 giá trị, cậu sẽ biết trong quá trình học.
Ở comment trả lời comment đó, tớ đã đưa ra ví dụ cho cậu, để thấy chỉ có 3 giá trị scanf sẽ trả về, trong 3 TH khác nhau.
Cậu mắc 2 sai lầm ở comment kể trên:
- Đưa ra giả thiết, nhưng không tự chứng minh.
- Không đọc manual, và đưa ra quan điểm dựa trên việc “đoán”.
Cả 2 sai lầm trên không chỉ có ở newbie như cậu, mà kể cả các kỹ sư (tồi) nhiều năm kinh nghiệm (không chỉ ở VN đâu). Đó là thứ tớ muốn cậu cải thiện.
Ở comment tiếp theo, cậu tiếp tục đi vào vết xe đổ đó.
Thì cá nhân mình hiểu là nó ngầm trả giá trị =2 nếu ta nhập đúng 2 đối, nó sẽ ngầm trả giá trị 3,4… nếu nhập nhiều hơn 2 đối
Ở đây cậu có các sai lầm:
- Dùng thuật ngữ sai.
Tớ biết kiểu newbie như cậu, cậu thường cố gắng sử dụng thuật ngữ riêng của bản thân, thay vì sử dụng thuật ngữ chung.
Như tớ đã lịch sự chỉ cho cậu, cậu không nên dùng nó. “Ngầm trả về” không có ý nghĩa gì (trả về là trả về, sao lại “ngầm”? Dù tớ hiểu, cậu muốn nói cậu “ngầm hiểu”, nhưng đó là do tớ thông minh nên hiểu ý cậu, chứ không phải do cậu diễn đạt đúng), “đối” cũng là từ riêng của cậu cho từ “đối số”.
Cậu sẽ gặp rắc rối về việc diễn đạt bản thân trong môi trường chuyên nghiệp sau này, nếu cậu vẫn dùng những thuật ngữ như vậy. Dùng từ đơn giản và chính xác là lời khuyên của tớ dành cho cậu.
- Vẫn là false asumption “trả về 3 nếu nhập 3 giá trị”. Tớ đã nghĩ cậu chưa đọc kỹ các comment trước, nên đã khuyên cậu đọc kỹ.
Ở comment dưới đây:
bạn có thể giải thích giúp mình rằng nếu cái hàm scanf trên với 2 đối số nhập k trả về giá trị int (số lượng đối số khai trong hàm scanf) thì while lấy cơ sở nào để so sánh điều kiện ==2? Có chăng cách giải thích khác hợp lý hơn k ?
Đây là sai lầm của cậu:
- Tớ e là, cậu có khả năng đọc hiểu vô cùng tồi tệ
Cậu có thể thấy, từ manual, tới các ví dụ tớ đưa ra, đều chỉ ra scanf sẽ trả về 1 số nguyên. Liệu cậu đã thực sự đọc bất cứ comment nào ở đây, hay cậu đang cố biến bản thân thành 1 kẻ bảo thủ cho rằng mình đúng, bằng cách đưa ra false statement về người khác?
Nếu cậu không chịu đọc kỹ các comment khác + manual, như tớ đã lịch sự chỉ ra ở comment trước, cuộc nói chuyện của chúng ta sẽ kết thúc, vì cậu không thèm lắng nghe người khác.
- Đây cũng là một điều tớ cần lưu ý cậu, cậu cần học cách lắng nghe. Một kỹ sư vừa lười đọc doc, vừa thích đưa ra các giả thiết nhưng không chứng minh, vừa dùng thuật ngữ mà chỉ mình anh ta hiểu, lại không biết lắng nghe, là kiểu kỹ sư mà không một tổ chức nào muốn làm việc cùng.
Ở comment cuối cậu reply tớ, cậu đã hiểu được cách in ra giá trị scanf rồi.
Cơ mà ở dòng này:
Tớ để từ " đối số" trong ngoặc kép, vì theo bạn nói đó k phải là đối số.
Và:
Thêm nữa là bạn trên cmt nói rằng nó k phải là đối số kiểu tham chiếu
Tớ nghĩ cậu đang lộn việc nói chuyện với ai đó rồi Vì ở ngay comment đầu tiên của tớ có nói:
Hàm scanf
sẽ trả về số lượng biến trong argument có thể gán được.
Cậu đang cố chứng minh tớ sai cái gì thế? Nếu cậu đang nói chuyện với người khác, đừng reply comment của tớ một cách dở hơi vậy nha
Giờ, cậu có thể thử trả lời @noname00 câu hỏi ở trên xem.
Hi vọng lần này cậu hiểu.