Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Lệnh scanf và fflush(stdin) có tác dụng thế nào?

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    13

    Mặc định Lệnh scanf và fflush(stdin) có tác dụng thế nào?

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3.  
    4. main()
    5. {
    6. int x; char *y;
    7. clrscr();
    8. printf("nhap x:");scanf("%d",&x); //   fflush(stdin);
    9. printf("nhap y:");gets(y);
    10. printf("\n%d   %s",x,y);
    11.  
    12.  
    13. getch();
    14. }

    Trong đoạn code trên mình có vài thắc mắc mong mấy bạn giải thích dùm thanks.
    + Ở lệnh scanf phần ("%d",&x) theo mình hiểu %d là chương trình chỉ nhận giá trị số nguyên sau đó sẽ truyền giá trị đó tới biến x có đúng ko?
    +Tại sao giữa 2 cách nhập số và chuỗi phải dùng đến fflush(stdin) trong khi nếu nhập 1 kiểu (số hoặc chuỗi) thôi lại ko cần .Chương trình sẽ xử lý các cách nhập trên như thế nào.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    - %d là định dạng dữ liệu. Dữ liệu trong bộ nhớ đệm chỉ là một chuỗi byte, tùy vào phần định dạng mà scanf quyết định lấy bao nhiêu byte trong vùng đệm.
    - Khi nhập xong dĩ nhiên ta phải nhấn enter. Phím enter sẽ để lại ký tự '\n' trong vùng đệm và điều này làm cho các hàm nhập chuỗi ko chạy được, vì các hàm nhập chuỗi sẽ dừng khi gặp '\n'. Lệnh fflush(stdin) dùng để xóa sạch vùng đệm trước khi nhập chuỗi.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    13

    _Mình còn mù mờ về bộ nhớ đệm quá.Bộ nhớ đệm ở đây là chương trình sẽ lấy ram làm bộ nhớ đệm cho nó hay là tự bản thân chương trình có riêng bộ nhớ đệm của nó.
    _Mình có đoạn code sau:
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. void main()
    4. {
    5. char *s,*n,*m;
    6. printf("s:");gets(s);
    7. printf("\nn:");gets(n);
    8. printf("\nm:");gets(m);
    9.  
    10. getch();
    11. }
    Theo cách giải thích của bạn thì khi mình nhập chuỗi s và nhấn enter thì ký tự "\n" sẽ dc lưu lại và các lệnh nhập kế tiếp sẽ không chạy dc.Các lệnh nhập trên vẫn nhập dc hết,tại sao khi nhập hiển nhiên là phải bấm enter mà các lệnh nhập toàn chuỗi hay nhập toàn số trong 1 hàm thì không sao.Nhưng khi nhập xen kẽ chuỗi và số thì có hiện tượng không nhập được.

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Vùng nhớ đệm của ai thì bạn ko cần quan tâm làm gì. Bạn chỉ cần biết là khi phím được gõ thì sẽ có vùng đệm lưu nó và hàm sscanf hay gets sẽ lấy ký tự ra từ vùng đệm đó.
    Hàm gets đã lấy luôn ký tự '\n' nên hàm gets sau ko bị trôi, còn scanf thì ko lấy '\n'
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 27-10-2008 lúc 10:29 PM.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    10 2007
    Bài viết
    3

    lệnh fflush(stdin) chỉ cần dùng sau khi scan ký tự hay chuỗi thôi, còn nếu scanf với các dạng dữ liệu số thì ko cần. Và ko phải trong tất cả các trường hợp đều bị dính \n trong đệm, có luc bị, có luc ko.

  6. #6
    Ngày gia nhập
    10 2013
    Bài viết
    3

    Mặc định Lệnh scanf và fflush(stdin) có tác dụng thế nào?

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    - %d là định dạng dữ liệu. Dữ liệu trong bộ nhớ đệm chỉ là một chuỗi byte, tùy vào phần định dạng mà scanf quyết định lấy bao nhiêu byte trong vùng đệm.
    - Khi nhập xong dĩ nhiên ta phải nhấn enter. Phím enter sẽ để lại ký tự '\n' trong vùng đệm và điều này làm cho các hàm nhập chuỗi ko chạy được, vì các hàm nhập chuỗi sẽ dừng khi gặp '\n'. Lệnh fflush(stdin) dùng để xóa sạch vùng đệm trước khi nhập chuỗi.
    Cám ơn meoconlongvang nhiều,không biết nút thank ở đâu.

Các đề tài tương tự

  1. Hàm fflush(stdin) | công dụng của fflush(stdin) như thế nào?
    Gửi bởi sangu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 20-05-2016, 10:06 PM
  2. Cách dùng lệnh fflush(stdin)? Lệnh fflush(stdin) có tác dụng gì?
    Gửi bởi dehin trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 05-11-2015, 02:23 AM
  3. Cách sử dụng hàm fflush(stdin) như thế nào?
    Gửi bởi vinh312k1 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 15-01-2011, 10:39 PM
  4. Lập trình C Thắc mắc về "clrscr() và fflush(stdin)?
    Gửi bởi 1101 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 20-11-2010, 07:28 PM
  5. scanf("%c",&kv); thiếu fflush(stdin);
    Gửi bởi phuongduy299 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 14-04-2010, 02:47 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn