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

Đề tài: Sủa lỗi bài tập về file .Chỉ in ra 1 dòng đầu(finished)

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

    Mặc định Sủa lỗi bài tập về file .Chỉ in ra 1 dòng đầu(finished)

    cho 1 file abc.txt
    C Code:
    1. /*Sample File
    2. * source.c
    3. */
    4. int main(void){
    5. int i;
    6. char s[100];
    7.  
    8. /*prompt for input */
    9. printf("Enter a string : ");
    10. /* accept a string */
    11. scanf("%s",s);
    12. /*display the string entered*/
    yêu cầu viết 1 hàm int comment( char file_name[])
    nếu hok đọc đc file return 1;
    nếu đọc được file return 0; và chỉ printf ra comment của file thôi.
    tại sao mình viết code mà nó chỉ in mỗi dòng đầu thôi nhỉ.Ai giúp mình với
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4.  
    5. //int Comments(char [50] );
    6.  
    7. int Comments(char file_name[50])
    8. {
    9. char s[20][100];
    10. int i,m,n;
    11. FILE *fp = NULL;
    12. fp=fopen(file_name,"r");
    13. if(fp==NULL)
    14.     {
    15.     printf(" Failed to open file!");getch();
    16.     return 0;
    17.    }
    18. while(fscanf(fp,"%[^\n]\n",s[i])==1)
    19.     i++;
    20. for(n=0;n<i;n++)
    21.     for(m=0;m<3;m++)
    22.         if(s[n][m]=='*')
    23.         {
    24.          printf("\n%s",s[n]);getch();
    25.             return 1;
    26.          }
    27. fclose(fp);
    28. }
    29.  
    30. main()
    31. {
    32. char file_name[50]={"abc.txt"};
    33. int i=0;
    34. printf("\nEnter a file name(.txt)  :");
    35. //scanf(" %30s",file_name);
    36. i= Comments(file_name);
    37. getch();
    38. }

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

    while(fscanf(fp,"%[^\n]\n",s[i])==1)
    Cái dòng này bạn dùng để lấy dữ liệu của từng dòng lưu vào bộ nhớ đúng ko . Mình nghĩ nên dùng fgets thì chắc cú hơn , bạn thử xem sao .

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

    mình thử rồi vãn vậy vạn ạ.Chán quá
    mình sủa như này thì nó chạy đúng.nhưng mình viết nó thành hàm
    C Code:
    1. void main()
    2. {
    3. char file_name[50]={"abc.txt"};
    4. char s[20][100];
    5. int i,m,n;
    6. FILE *fp = NULL;
    7. fp=fopen(file_name,"r");
    8. if(fp==NULL)
    9.     {
    10.     printf(" Failed to open file!");
    11.     return ;
    12.    }
    13.  
    14.     while(fscanf(fp,"%[^\n]\n",s[i])==1)
    15.     i++;
    16. for(n=0;n<i;n++)
    17.     for(m=0;m<3;m++)
    18.         if(s[n][m]=='*')
    19.                                printf("\n%s",s[n]);
    20.             //return 1;
    21.      getch();
    22.  
    23. fclose(fp);
    24. }
    Đã được chỉnh sửa lần cuối bởi adam452 : 08-04-2008 lúc 10:49 PM.

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

    Thay đoạn code sau:
    C Code:
    1. while(fscanf(fp,"%[^\n]\n",s[i])==1)
    2.     i++;
    3. for(n=0;n<i;n++)
    4.     for(m=0;m<3;m++)
    5.         if(s[n][m]=='*')
    6.         {
    7.          printf("\n%s",s[n]);getch();
    8.             return 1;
    9.          }

    Thành đoạn code:
    C Code:
    1. while (!feof(fp))
    2. {
    3.    fscanf(fp,"%s%[^\n]",s)
    4.    printf("%s",s);
    5. }

    Xem thế nào?

    Best Regards!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  5. #5
    Ngày gia nhập
    03 2008
    Bài viết
    9

    C Code:
    1. while (!feof(fp))
    2. {
    3.    fscanf(fp,"%s%[^\n]",s)
    4.    printf("%s",s);
    5. }
    sau khi in no nhu sau
    C Code:
    1. /*Sample
    2. *
    3. */
    4. int
    5. int
    6. char
    7. /*prompt
    8. printf("Enter
    9. /*
    10. scanf("%s",s);
    11. /*display
    12. printf(%s\n",s);
    13. return
    14. }
    Em chỉ cần in ra mỗi comment thôi. Như này này
    C Code:
    1. /*Sample File
    2. * source.c
    3. */
    4.  
    5. /*prompt for input */
    6. /* accept a string */
    7. /*display the string entered*/

    Vui lòng đưa code vào tag code chứ không phải tag quote. Đọc Nội quy để biết thêm chi tiết.
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 10-04-2008 lúc 01:03 AM. Lý do: Nhắc nhở

  6. #6
    Ngày gia nhập
    03 2008
    Bài viết
    9

    Mặc định Sủa lỗi bài tập về file .Chỉ in ra 1 dòng đầu(finished)

    thôi em làm đc rồi.Nhung dù sao vẫn cảm ơn anh.Anh có thể xóa topic này hộ em đc thì càng tốt.Thank anh

    Code:
    int Comments(char file_name[50])
    {
    char s[20][100];
    int i,m,n;// em mất chua gán i=0
    Đã được chỉnh sửa lần cuối bởi adam452 : 08-04-2008 lúc 11:39 PM.

  7. #7
    Ngày gia nhập
    03 2008
    Bài viết
    7

    Trích dẫn Nguyên bản được gửi bởi Dreaminess Xem bài viết
    Thay đoạn code sau:
    C Code:
    1. while(fscanf(fp,"%[^\n]\n",s[i])==1)
    2.     i++;
    3. for(n=0;n<i;n++)
    4.     for(m=0;m<3;m++)
    5.         if(s[n][m]=='*')
    6.         {
    7.          printf("\n%s",s[n]);getch();
    8.             return 1;
    9.          }

    Thành đoạn code:
    C Code:
    1. while (!feof(fp))
    2. {
    3.    fscanf(fp,"%s%[^\n]",s)
    4.    printf("%s",s);
    5. }

    Xem thế nào?

    Best Regards!
    Đoạn code của Dr mắc một lỗi sai
    Code:
    while (!feof(fp))
    Việc sử dụng feof sẽ khiến dòng cuối cùng bị in ra 2 lần,lý do dòng cuối cùng bị in ra 2 lần là do bản thân hàm feof nó không tự phát hiện được EOF mà phải dựa vào các hàm khác như fgets,fread,...Khi các hàm này trỏ đến EOF thì feof mới nhận ra là đến cuối file.Tóm lại là không nên sử dụng feof mà nên sử dụng fgets,fscanf,....để xác định xem đã đến cuối file chưa

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

    Ai nói với bạn là feof dựa vào các hàm fgets, fread, ... feof là một macro được định nghĩa như sau:

    C Code:
    1. #define feof(f)     ((f)->flags & _F_EOF)

    Bạn thử lại xem nào? Dr thấy nó chạy ổn đó!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

    Trích dẫn Nguyên bản được gửi bởi Dreaminess Xem bài viết
    Ai nói với bạn là feof dựa vào các hàm fgets, fread, ... feof là một macro được định nghĩa như sau:

    C Code:
    1. #define feof(f)     ((f)->flags & _F_EOF)

    Bạn thử lại xem nào? Dr thấy nó chạy ổn đó!
    Tôi có 1 file tên là dulieu.Nội dung của file này như sau:
    Code:
    Chuong trinh C
    Fedora core 6
    Còn đây là chương trình C đọc dữ liệu từ file này
    Code:
    #include<stdio.h>
    main()
    {
    FILE *f;
    char buf[50];
    f=fopen("./Desktop/dulieu","r");
    while(!feof(f))
    {
    fgets(buf,sizeof(buf),f);
    printf("%s",buf);
    }
    }
    output của chương trình
    Code:
    Chuong trinh C
    Fedora core 6
    Fedora core 6
    Dr chạy thử lại xem có đúng như vậy không

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

    Dr chạy thử code của bạn thì nó in ra:
    Chuong trinh C
    Fedora core 6Press any key to continue . . .
    Hoàn toàn không có sai như bạn nói.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

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

  1. Lấy 1 dòng ra từ file text và xóa dòng đó đi trong file cũ!!!
    Gửi bởi tranquang_hq trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 05-12-2012, 04:00 PM
  2. Tách file name khỏi path và đọc ghi file theo dòng trong MFC như thế nào?
    Gửi bởi Athrun trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 14-12-2011, 12:34 PM
  3. Bài tập C++ Có cách nào bỏ qua 1 dòng khi đọc file 1 cách dễ dàng không ạ?
    Gửi bởi hungphong10tin 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: 18-08-2011, 12:17 PM
  4. Ghi từng dòng trên file nhị phân, mở file lại đọc tìm dòng tuơng ứng trong C#
    Gửi bởi henxui_nobita_00 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 05-04-2011, 11:38 PM
  5. Bai tap ve file!Tạo một file text trong đó mỗi dòng lưu 3 số nguyên
    Gửi bởi sonsdc 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: 06-03-2009, 10:59 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