User Tag List

+ Trả lời chủ đề
Hiện kết quả từ 1 tới 4 của 4

Chủ đề: Giải thích giùm %*c trong C

  1. #1
    svBK's Newbie
    Tham gia ngày
    Feb 2012
    Bài gửi
    2

    Mặc định Giải thích giùm %*c trong C

    Câu lệnh này có nghĩa là gì:
    printf("So hoc sinh:");
    scanf("%d%*c",&sohocsinh);

    Không hiểu chỗ (%d%*c)

  2. #2
    Điều hành viên Avatar của iexplore
    Tham gia ngày
    Sep 2010
    Bài gửi
    208

    Mặc định Re: Giải thích giùm với(C)

    Quote Nguyên văn bởi hdv0112 Xem bài viết
    Câu lệnh này có nghĩa là gì:
    printf("So hoc sinh:");
    scanf("%d%*c",&sohocsinh);

    Không hiểu chỗ (%d%*c)
    lần sau bạn post cả chương trình lên luôn chứ chỉ một dòng thì khó hiểu lắm
    scanf("%d%*c",&sohocsinh); cái %*c sẽ giúp xóa đi kí tự '/0' còn lại trong stdin, nghĩa là nếu bạn sử dụng gets(chuoi) phía sau sẽ không cần phải dùng fflush(stdin) để khử '/0'
    ví dụ với chương trình

    PHP Code:
    int d;
    char s[20];
    scanf("%d", &d);
    fflush(stdin);
    gets(s);
    printf("%d          %s"ds); 
    có thể viết lại như thế này

    PHP Code:
    int d;
    char s[20];
    scanf("%d%*c", &d);
    gets(s);
    printf("%d          %s"ds); 
    diễn tả chưa chính xác lắm, các pro đừng chém nha

  3. #3
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Giải thích giùm với(C)

    Đang tìm hiểu về vấn đề này thì thấy Khanh trả lời . Hình như cậu nhầm vì làm gì có kí tự nào là '/0' , chỉ có '\0', '\n', '\t',... thôi.

    Một đoạn giải thích của pro langman trên C Việt như sau:

    *****************************************

    thật ra đặc tả có thể viết một cách tổng quát như sau:
    "&[*][d….d]ký_tự_chuyển_dạng"
    ý nghĩa của [] trong cú pháp tin học có nghĩa là có thể có hoặc thiếu vắng.

    Việc có mặt của dấu * nói lên rằng trường vào vẫn được dò đọc bình thường, nhưng giá trị của nó bị bỏ qua (không được lưu vào bộ nhớ ). Như vậy, đặc tả chứa dấu * sẽ không có đối tương ứng.

    qua đó ta có thể lợi dụng dấu * này để bỏ qua 1 kí tự trong stdin
    giả sử tôi có đoạn code như sau

    PHP Code:
    #include "stdafx.h"
    #include <iostream>
    using namespace std;



    void main(void)
    {
        
    int n;
        
    scanf("%*c%d",&n);
        
    cout<<n;

        
    system("pause");

    nếu tôi nhập a2 thì kí tự a sẽ bị bỏ qua và n == 2
    nếu tôi nhập 23 thì 2 sẽ bị bỏ qua và n=3


    ok ?

    vậy việc scanf %*c mục đích là bỏ qua 1 kí tự trên stdin,

    áp dụng vào trường hợp stdin bị trôi, scanf %*c sẽ bỏ qua \n còn trong stdin, qua đó sẽ làm hết trôi, tác dụng gần như fflush(stdin)

    Nhưng :
    trong IDE cao hẳn như visual studio 2008 (pro) thì gets() ko làm trôi stdin đâu, thêm scanf %*c chỉ làm sai lệch vấn đề đi thôi

    ******************************

    Kết luận: như vậy scanf("%d%*c",&sohocsinh); có tác dụng xóa kí tự xuống dòng '\n' sau khi nhập dữ liệu cho hàm scanf do sau khi thực hiện hàm scanf thường để lại '\n' trong stdin.

    Câu lệnh trên hoàn toàn có thể viết lại thành

    PHP Code:
    scanf("%d", &sohocsinh);
    getchar(); 
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  4. #4
    Điều hành viên Avatar của iexplore
    Tham gia ngày
    Sep 2010
    Bài gửi
    208

    Mặc định Re: Giải thích giùm %*c trong C

    hơ hơ nhầm thật, mình còn gà mờ c quá
    thêm một cách nhập xâu chỉ có chữ cái và dấu cách không cần gets là
    Mã:
    scanf("%[a-zA-Z ]", &xau);

  5. Tớ cảm ơn iexplore đã chia sẻ.


+ Trả lời chủ đề

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Chủ đề tương tự

  1. [Hỏi - Đáp] CÁCH TÍNH DCT TRONG MA TRẬN 8X8 ( Biến đổi cosin trong nén ảnh JPEG)
    Gửi bởi hkk626 trong mục Diễn đàn Học tập và Nghiên cứu KH Sinh viên
    Trả lời: 6
    Bài cuối: 25-12-2011, 09:13 PM
  2. lv3 trong deche.vn chỉ trong 19h
    Gửi bởi denosagas trong mục Game Online
    Trả lời: 0
    Bài cuối: 01-07-2009, 08:31 PM

Từ khóa (Tag) của chủ đề này

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


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube