Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Thắc mắc về hàm scanf và gets, atoi

    Mình mới học C đến phần structure thì có 1 ví dụ

    Mã:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #define MAX 50
    void main(void)
    {
        struct nhanvien
        {
            int manv;
            char hoten[30];
        };
        nhanvien snv[MAX];
        char ctam[10];
        int i, in;
        printf("Nhap vao so nhan vien: ");
        gets(ctam);
        in = atoi(ctam);
    //Nhap danh sach nhan vien
        for(i = 0; i < in; i++)
        {
            printf("Nhap vao ma nhan vien thu %d: ", i + 1);
            gets(ctam);
            snv[i].manv = atoi(ctam);
            printf("Nhap vao ho ten: ");
            gets(snv[i].hoten);
        }
    //in danh sach nhan vien
        for(i = 0; i < in; i++)
        printf("%5d %s
    ", snv[i].manv, snv[i].hoten);
        getch();
    }
    Ở phần nhập số nhân viên, ví dụ này dùng hàm gets + atoi thay vì dùng scanf với lưu ý để
    nhập một số nguyên tránh lỗi do scanf và vùng đệm bàn phím gây ra.
    Cho mình hỏi lỗi này là lỗi gì và bản chất hàm scanf khác gì 2 hàm kia.
    Mình cám ơn trước [IMG]images/smilies/biggrin.png[/IMG]

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cám ơn các bạn mình hiểu rồi, lỗi bộ nhớ đệm [IMG]images/smilies/smile.png[/IMG]))

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Với scanf thì ký tự enter cuối cùng (để kết thúc việc nhập) sẽ vẫn còn lại ở vùng đệm bàn phím.
    lệnh gets (để nhập xâu) thì lệnh gets sẽ ghi nhận ký tự enter ở vùng đệm và việc nhập xâu sẽ gây lỗi.
    có cách khác là dùng lệnh xóa vùng đệm sau khi dùng scanf.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    1. fflush(stdin) là bad code, nên phải sử dụng giải pháp thay thế.
    2. Nếu nhập cái gì đó ko phải là số, thì từ giá trị trả về của scanf có thể biết đc.

    Code trên có vấn đề: Nếu ctam là 1 cái gì đó ko phải số thì in ko có ý nghĩa gì cả!

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •