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ố 11 kết quả

Đề tài: Đếm ký tự của một tập tin trong C?

  1. #1
    No Avatar
    nqphuc Khách

    Mặc định Đếm ký tự của một tập tin trong C?

    Code:
    #include <stdio.h>
    #include <ctype.h>
    
    void main()
    {
    FILE *fp;
    char sf[50], c;
    long count = 0;
    
    printf("\nNhap vao ten tap tin : ");
    scanf("%s", sf);
    if ((fp = fopen(sf, "r")) == NULL)
    fprintf(stderr, "\nKhong the mo tap tin %s", sf);
    else
    {
    while ((c = fgetc(fp)) != EOF)
    if (isalpha©)
    count++;
    printf("\nSo ky tu trong %s la %ld", sf, count);
    }
    
    getch();
    }

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Sao anh không để nó trong tag [php] cho dễ xem.
    Cảm ơn anh nhé!

  3. #3
    No Avatar
    kiem_nhieutien Khách

    cho mình hỏi :
    1. nếu dòng " scanf("%s", sf); " mà mình viết thành :" scanf("%s", &sf); " thì có gì khác không
    2. bạn có thể giải thích rõ hơn câu lệnh: " fprintf(stderr, "\nKhong the mo tap tin %s", sf); ". Mình không hiểu lắm chỉ biết đây là câu thông báo khi không mở được tệp, có phải stderr là standar error không? và như vậy nếu có lỗi thì sẽ xuất ra stderr hả???
    3. tại sao bạn open file mở không chịu close file???

  4. #4
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Trích dẫn Nguyên bản được gửi bởi kiem_nhieutien
    cho mình hỏi :
    1. nếu dòng " scanf("%s", sf); " mà mình viết thành :" scanf("%s", &sf); " thì có gì khác không
    2. bạn có thể giải thích rõ hơn câu lệnh: " fprintf(stderr, "\nKhong the mo tap tin %s", sf); ". Mình không hiểu lắm chỉ biết đây là câu thông báo khi không mở được tệp, có phải stderr là standar error không? và như vậy nếu có lỗi thì sẽ xuất ra stderr hả???
    3. tại sao bạn open file mở không chịu close file???
    1. trong trương hợp này thì không sao cả, vì người ta chỉ yêu cầu bắt buộc là con trỏ thôi (ở đây sf đã là char[50] rồi). Tóm lại là 2 cách viết khác nhau nhưng trong trường hợp này thì không ảnh hưởng gì
    2. fprintf có tham số thứ nhất trỏ đến stream muốn xuất ra. ở đây là stderr có nghĩa là xuất ra màn hình. còn nó là viết tắt chữ gì thì chịu nhưng chắc không phải là error
    3. !

  5. #5
    Ngày gia nhập
    07 2006
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi vinhie47
    2. fprintf có tham số thứ nhất trỏ đến stream muốn xuất ra. ở đây là stderr có nghĩa là xuất ra màn hình. còn nó là viết tắt chữ gì thì chịu nhưng chắc không phải là error
    stderr : Standard error output device

  6. #6
    Ngày gia nhập
    07 2006
    Bài viết
    166

    Mặc định Đếm ký tự của một tập tin trong C?

    Standard error output stream chứ nhỉ?
    http://en.wikipedia.org/wiki/Standar...r_.28stderr.29
    ...
    wikipedia
    ...
    Standard input is data (often text) going into a program. The program requests data transfers by use of the read operation. Not all programs require input. For example, the dir or ls program (which displays file names contained in a directory) performs its operation without any stream data input.

    Unless redirected, input is expected from the text terminal which started the program.

    The file descriptor for standard input is 0 (zero); the corresponding stdio.h variable is FILE *stdin; similarly, the iostream.h variable is cin

  7. #7
    Ngày gia nhập
    07 2006
    Bài viết
    6

    Trích dẫn Nguyên bản được gửi bởi vinhie47
    Standard error output stream chứ nhỉ?
    http://en.wikipedia.org/wiki/Standar...r_.28stderr.29
    Chắc là bạn nhầm hay là mình nhầm ???
    Mình thì đọc được trong help thì stderr là Standard error output device. Để kiểm tra bạn vào Borland C++ gõ vào stderr và nhấn Ctrl + F1 là biết ngay thôi !

    Chúc vui !

  8. #8
    No Avatar
    yuchin Khách

    stderr đúng là Standard error output device rồi
    và đó chính là màn hình (chỉ đúng trong DOS hoặc các hệ điều hành sử dụng console thôi)

  9. #9
    No Avatar
    lqkhoi Khách

    Trích dẫn Nguyên bản được gửi bởi yuchin
    stderr đúng là Standard error output device rồi
    và đó chính là màn hình (chỉ đúng trong DOS hoặc các hệ điều hành sử dụng console thôi)
    Ké vô chút xíu. Để in ra màn hình console có 2 cách sử dụng: hoặc in ra stdout, hoặc stderr

    2 cái std đó cùng in ra 1 màn hình nhưng thông thường mình nên phân biệt nếu muốn in ra màn hình với tính cách thông báo nên dùng stdout, nếu là lỗi thì là stderr. Để sau này có thể filter chọn ghi cái nào vào log. Ai viết lên cao xíu thì nói tiếp về cái này.

    Về mặt hệ thống, fprintf(stderr .., đảm bảo việc in ra console trọn vẹn trước khi nhảy qua câu lệnh kế tiếp. Đây là 1 lệnh blocking.
    Ưu điểm: - Thường dùng để in debug vì bảo đảm chắc chắn được in ra
    Khuyết điểm: - Hao resource vì đòi hỏi việc in thực sự ra màn hình liên tục.



    Trong khi đó printf == fprintf(stdout, không đảm bảo việc in ra console ngay lập tức mà nó sẽ chứa trong 1 cái buffer mà hệ thống quản lý. Khi nào full mới được in ra.
    Ưu điểm:
    - Được đưa vào trong buffer và việc in ra khi nào full buffer được quản lý bởi hệ thống --> Ít hao resource, thích hợp cho việc in thông báo

    Khuyết điểm:
    - Không in tức thời do đó không thể tin cậy trong việc dùng để debug hay in error. Vì có khả năng chương trình die hay exit mà dòng print đó vẫn không được in ra

    Ai xài linux và lập trình hệ thống nhiều sẽ hiểu rõ hơn vấn đề này.

  10. #10
    Ngày gia nhập
    08 2006
    Nơi ở
    Chương Mỹ-Hà Tây
    Bài viết
    27

    hay quá các bác ơi các bác quả là thiên tài

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