Hàm getchar() và EOF trong C

Em vừa mới học C đến phần switch selection statement thì có 1 bài ví dụ có sử dụng getchar() và EOF nhưng em chưa hiểu lắm. Không biết có anh/chị nào rành C có thể chỉ giúp em được không?

  • Hàm getchar() là lấy kiểu dữ liệu char, vậy vì sao lại liên quan đến int vậy ạ? Em đọc dòng dưới là kí tự được lưu trong biến dưới type char. Nhưng bên trên lại ghi là đọc kí tự từ bàn phím và return int? Cái này em có thể hiểu là sau khi lấy dữ liệu từ bàn phím là kí tự, kí tự đó sẽ được chuyển thành mã ASCII để so sánh với EOF phải không ạ? Và khi nào thì mình phân biệt được grade = getchar() sẽ lưu dưới type char hay type integer?

  • EOF ở đây tức là -1, trong trường hợp bằng -1 thì nó sẽ skip vòng lặp?

Em cảm ơn trước.

1 Like
  1. Nguyên mẫu hàm getchar trả về kiểu int. Kiểu của gradeint chứ không phải char đâu.
  2. EOF (end-of-file) là cờ (flag) để chỉ định kết thúc tập tin. Tùy theo trình biên dịch mà có thể có giá trị khác nhau, nhưng thường là -1. Bởi vậy, không nên so sánh trực tiếp với -1 mà nên dùng EOF để kiểm tra hết tập tin.

Liệu bạn có thắc mắc vì sao hàm getchar lại trả về int mà không phải char?
EOF!
Kiểu char (1 byte) chỉ lưu được 256 giá trị kí tự (0 -> 255). Mục đích của hàm getchar còn để xem đã hết tập tin hay chưa nên cần có EOF, mà char đã hết chỗ, nên cần kiểu dữ liệu lớn hơn. int (4 byte) là kiểu dữ liệu lớn hơn và phổ biến, đủ chỗ để thêm EOF vào. Bởi thế EOF không phải là 1 kí tự, nó chỉ là 1 giá trị cờ để đánh dấu “hết tập tin”.

Tài liệu tham khảo:

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