Giải thích ý nghĩa dòng lệnh này trong C

while(scanf("%s",&s)!=-1)

Nó vẫn là câu lệnh vòng lập while thôi. Khi bạn nhập giá trị của s và màn hình. Nếu s khác -1 thì sẽ chạy lệnh trong while.

Ý nghĩa dòng này là thực hiện scanf() cho tới khi kết quả (return value) của scanf() trả về -1.

Ở đây có 2 vấn đề:

  1. Không nên check với -1, mặc dù mình đoán là tác giả muốn check EOF (end of file).
    Nên dùng macro EOF hoặc thứ tương tự thay cho -1 vì không phải mọi hệ thống đều định nghĩa EOF=-1. Vì ngữ cảnh bạn đưa quá hẹp nên mình chỉ có thể hướng câu trả lời về EOF.

Câu này sai nha. Ở đây hàm scanf() trả về số lượng phần tử được scan (là số dương) khi thực hiện thành công, và trả về mã lỗi (là số âm) khi thực hiện thất bại. Mã lỗi có thể là -1, -2, -3,… tùy thuộc vào loại lỗi, liên quan tới file, tới encoding, và vô vàn thứ khác không xác định. Theo cách code của tác giả đưa ra thì hệ thống sẽ không thể xử lý các trường hợp lỗi khác -1. Nên cơ bản mình không thích cách code này.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?