Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Hỏi về quy định ngăn cách trong scanf ?

  1. #1
    Ngày gia nhập
    04 2007
    Bài viết
    27

    Mặc định Hỏi về quy định ngăn cách trong scanf ?

    À mình thắc mắc về hàm scanf ở chỗ là không biết rõ cái cách tách rời các giá trị hay kết thúc hàm này như thế nào . Đây là nguyên văn trong cuốn theory and problem with C :

    Within the control string, multiple character groups can be contiguous, or they
    can be separated by whitespace characters (i.e., blank spaces, tabs or newline characters).
    If whitespace characters are used to separate multiple character groups in the control string, then all consecutive whitespace characters in the input data will be read but ignored. The use of blank spaces as character-group separators is very common.

    Bạn nào giải thích rõ hộ mình với , mình ko rành tiếng Anh lắm ^_^ . Thanks

    À quên còn cái này nữa . Tại sao phải thêm dấu & vào trước tên biến vậy ? Nó có ý nghĩa gì ? Khi ta nhập 1 giá trị từ bàn phím vào thì lúc đó quy trình xử lý của máy tính ra sao ?
    Đã được chỉnh sửa lần cuối bởi nanosi : 09-06-2007 lúc 10:54 AM.

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    blank spaces, tabs or newline characters
    Đọc rõ dòng đó thì hiểu nè .

    Tại sao phải thêm dấu & vào trước tên biến vậy
    Đọc lại sách về địa chỉ và nội dung của 1 ô nhớ . Sau này học lên cao 1 chút thì sẽ hiểu .

    Khi ta nhập 1 giá trị từ bàn phím vào thì lúc đó quy trình xử lý của máy tính ra sao ?
    Không hiểu rõ câu hỏi lắm ?

  3. #3
    No Avatar
    zelda Khách

    Trích dẫn Nguyên bản được gửi bởi nanosi Xem bài viết
    Within the control string, multiple character groups can be contiguous, or they
    can be separated by whitespace characters (i.e., blank spaces, tabs or newline characters).
    If whitespace characters are used to separate multiple character groups in the control string, then all consecutive whitespace characters in the input data will be read but ignored. The use of blank spaces as character-group separators is very common.
    Dịch ra dùm nhé

    Bên trong một chuỗi điều khiển, những nhóm nhiều ký tự có thể kề nhau, hoặc chúng có thể được ngăn cách, sau đó tất cả những ký tự khoảng trắng liên tục trong dữ liệu nhập vào có thể được đọc hoặc được phớt lờ. Việc sử dụng khoảng trống như những khoảng cách nhóm ký tự thì rất phổ biến.

    He he, mình dịch không hay lắm, hi vọng bạn hiểu.

    Tại sao phải thêm dấu & vào trước tên biến vậy
    int x;
    ghi x thì được giá trị
    ghi &x thì được địa chỉ của 1 ô nhớ có tên "x" trong ô nhớ

  4. #4
    Ngày gia nhập
    02 2007
    Nơi ở
    TP.HCM - dưới cầu SG
    Bài viết
    12

    Trích dẫn Nguyên bản được gửi bởi nanosi Xem bài viết
    Within the control string, multiple character groups can be contiguous, or they can be separated by whitespace characters (i.e., blank spaces, tabs or newline characters).
    If whitespace characters are used to separate multiple character groups in the control string, then all consecutive whitespace characters in the input data will be read but ignored. The use of blank spaces as character-group separators is very common.
    *** Dịch:
    + "Trong chuỗi điều khiển, nhiều nhóm_ký_tự có thể đứng liền nhau hoặc có thể ngăn cách giữa chúng bằng các ký tự trắng ( đó là ký tự space, tab hoặc dấu xuống hàng ). Nếu sử dụng các ký tự trắng để phân cách nhiều nhóm_ký_tự trong chuỗi điều khiển, khi đó các ký tự trắng trong dữ liệu nhập vẫn được đọc nhưng chúng bị bỏ qua. Rất thường thấy việc dùng các ký tự trắng để phân cách như thế"
    ***Giải thích và minh họa:
    Khi sử dụng hàm scanf, mẫu hàm là scanf( "chuỗi_điều_khiển", đối số 1, đối số 2, ... ) trong đó "từng đối số sẽ tương ứng theo thứ tự với từng nhóm_ký_tự_định_dạng cho nó trong chuỗi điều khiển".
    Chẳng hạn scanf( " %d%ld %lf", &inguyen, &inguyenlon, &idouble ) thì nó có nghĩa: nhập vào 3 số, tương ứng, nhập số đầu tiên là số nguyên vào biến inguyen, số thứ 2 là số nguyên lớn và vào biến inguyenlon, số thứ 3 là số thực double và vào biến idouble. Dấu & là địa chỉ, &inguyen là địa chỉ của biến inguyen, nhập dữ liệu thì ta phải biết "nhập vào đâu?". Trong Vd trên thì "%d", "%ld", "%ld" là các nhóm_ký_tự_định_dạng ( Một số sách gọi chuỗi_điều_khiển là chuỗi các mã định dạng hoặc chuỗi định dạng hoặc chuỗi mã qui cách ( format code ))
    Việc "bỏ qua các ký tự trắng" sẽ thấy rõ hơn qua vd: scanf("%d %c", &iint, &cChar ) ( giữa %d và %c có 1 khoảng trắng ), nếu bạn nhập
    Code:
        
       150  a
    thì các ký tự space trước số 150 bị bỏ qua và iint nhận giá trị 150; các ký tự space sau 150 và trước ký tự a bị bỏ qua và cChar nhận giá trị 'a'. Nếu ko có khoảng trắng phía trước trong " %c", biến cChar sẽ nhận được ký tự ' ' ( ký tự trắng )
    Tại sao người ta lại dùng nhóm_ký_tự trong chuỗi điều khiển. Xem thêm 1 chút vd sau:
    Code:
    scanf("%3d %4d", &d, &n ); // nhập số nguyên d trong 3 chữ số, n trong 4 chữ số
    Nhập: ____12345 ( dấu _ để thay cho ký tự space ) thì ta được d = 123, n = 45
    Hàm scanf() còn nhiều điều cần giải thích thêm. Bạn cũng nên có một cuốn sách tiếng Việt đọc để hiểu rõ hơn + xem cụ thể ví dụ trong sách. Tuy nhiên, hãy cố gắng học tiếng Anh và ko phải sách tiếng Anh nào viết cũng hay cả; có nhiều cuốn rất "khoai" cả về nội dung và cách dùng tiếng Anh ).
    Thân!
    Nơi nào khiến anh dừng bước, nơi đó có em.

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

    scanf("%3d %4d", &d, &n ); // nhập số nguyên d trong 3 chữ số, n trong 4 chữ số
    Nhập: ____12345 ( dấu _ để thay cho ký tự space ) thì ta được d = 123, n = 45
    Cám ơn bạn nhiều . Chỉ có mỗi phần này mình chưa hiểu lắm thôi . Bạn giải thích rõ ràng hộ với .

  6. #6
    Ngày gia nhập
    01 2007
    Nơi ở
    Somewhere I belong
    Bài viết
    168

    Mặc định Hỏi về quy định ngăn cách trong scanf ?

    Híc mình ghét dùng sanf với prinf , trong C++ cout<< với cin>> thích hơn nhiều.

  7. #7
    Ngày gia nhập
    05 2007
    Bài viết
    2

    scanf có thể thay thế cout<<,cin>> thay cho prinf

  8. #8
    Ngày gia nhập
    04 2007
    Bài viết
    27

    Cho mình hỏi về chương trình này

    main()
    {
    char s[100];

    gets(s);

    while(scanf("%s",s))
    printf("[%s] co chieu dai la %d\n",s,strlen(s));
    }
    Khi mình chạy thử thì được kết quả sau :

    nhập : toi di hoc

    kq: [toi] co chieu dai la 3
    [di] co chieu dai la 2
    [hoc] co chieu dai la 3

    rồi nó bắt nhập tiếp chẳng cho dừng ><

    Bạn nào giải thích hộ . THANKS

  9. #9
    Ngày gia nhập
    05 2007
    Bài viết
    7

    -Hàm scanf sẽ trả về một số nguyên bằng số giá trị mình nhập vào .
    -Câu lệnh while(scanf("%s",s)) tương đương với while(scanf("%s",s)!=NULL) ,vì vậy nếu việc ghi thành công nó sẽ trả về giá trị khác NULL( giá trị đó là 1 vì mỗi lần nó chỉ ghi vào 1 biến s).Do đó nó không bao giờ dừng .
    Đã được chỉnh sửa lần cuối bởi SegoGs : 12-06-2007 lúc 10:26 PM.
    ----------Kiến thức qua đi chỉ có bằng cấp ở lại----------

    Hỏng chuột , hư bàn phím ,game bằng niềm tin

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

    À , cái vụ tại sao ko bao gìơ ngừng thì tui hiểu nhưng mà bạn nào có thể giải thích 1 cách cặn kẽ sự vận hành của chương trình này được không ?

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

  1. Bán tấm compact | Phụ kiện vách ngăn vệ sinh | Thi công vách ngăn hoàn thiện
    Gửi bởi marketeronline trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 2
    Bài viết cuối: 06-10-2014, 01:02 PM
  2. bán tấm compact và thi công vách ngăn vệ sinh, vách ngăn văn phòng, vách ngăn di động, sàn nâng kỹ thuật
    Gửi bởi marketeronline trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 24-09-2013, 01:14 AM
  3. ký tự * trong hàm scanf và printf
    Gửi bởi thang7788 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: 06-04-2011, 11:15 PM
  4. lỗi không gán được trong lệnh scanf.
    Gửi bởi quocduan 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: 04-11-2010, 01:28 PM
  5. Cấu trúc ngăn xếp và các thao tác trên ngăn xếp?
    Gửi bởi master_cheat001 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: 02-11-2010, 11:43 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