Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 6 của 6
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Đọc file text bị lỗi vòng lặp

    Đoạn code bị lỗi của mình như sau:
    Mã:
    struct Point
    {
        char name[5];
        float x, y;
    };
    
    struct MyArray
    {
        Point *a;
        int num;
    };
    
    void readStationsFromFile(char *fileName, MyArray &a, MyArray &b)
    {
        FILE *fp;
        int m, n;
        m = 0;
        n = 0;
        countColRow(fileName, m, n);  // Hàm đếm số dòng và cột trong file text
        a.num = n;
    
        fopen_s(&fp, fileName, "rt");
        if (!fp)
        {
            printf("Cannot open file...
    ");
            return;
        }
    
        if (a.num <= 0)
        {
            printf("Your Stations.txt is empty...
    ");
            return;
        }
        a.a = new Point[a.num];
    
        if (a.a == NULL)
        {
            return;
        }
    
        int i = 0;
    
        while (!feof(fp))
        {
            fscanf_s(fp, "%s %f %f
    ", a.a[i].name, &a.a[i].x, &a.a[i].y);  // Dòng bị lỗi
            i++;
        }
    
        fclose(fp); 
    }
    Debug thì thấy bị lỗi ngay chỗ fscanf_s cuối, nó báo lỗi Access violation writing location.... Giờ mình vẫn chưa biết là nên fix chỗ nào, phiền bạn nào chỉ giúp mình. Thanks.

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn sửa lại thành như vầy:

    Mã:
    while (fscanf_s(fp, "%s %f %f
    ", a.a[i].name, &a.a[i].x, &a.a[i].y) != EOF)
       i++;

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi huycan
    Bạn sửa lại thành như vầy:

    Mã:
    while (fscanf_s(fp, "%s %f %f
    ", a.a[i].name, &a.a[i].x, &a.a[i].y) != EOF)
       i++;
    Vẫn bị lỗi đó Mình debug thì nó trỏ đến chỗ này và báo lỗi:
    Mã:
    rep     stosd
    main_loop_tail:
            test    edx,edx         ; if there is no tail bytes,
            jz      finish          ; we finish, and it's time to leave
    ; Set remaining bytes
    ...........................

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn dùng trình dịch gì?

    - - - Nội dung đã được cập nhật ngày 14-05-2014 lúc 05:39 PM - - -

    Trích dẫn Gửi bởi gialoui
    Đoạn code bị lỗi của mình như sau:
    Mã:
    struct Point
    {
        char name[5];
        float x, y;
    };
    
    struct MyArray
    {
        Point *a;
        int num;
    };
    
    void readStationsFromFile(char *fileName, MyArray &a, MyArray &b)
    {
        FILE *fp;
        int m, n;
        m = 0;
        n = 0;
        countColRow(fileName, m, n);  // Hàm đếm số dòng và cột trong file text
        a.num = n;
    
        fopen_s(&fp, fileName, "rt");
        if (!fp)
        {
            printf("Cannot open file...
    ");
            return;
        }
    
        if (a.num <= 0)
        {
            printf("Your Stations.txt is empty...
    ");
            return;
        }
        a.a = new Point[a.num];
    
        if (a.a == NULL)
        {
            return;
        }
    
        int i = 0;
    
        while (!feof(fp))
        {
            fscanf_s(fp, "%s %f %f
    ", a.a[i].name, &a.a[i].x, &a.a[i].y);  // Dòng bị lỗi
            i++;
        }
    
        fclose(fp); 
    }
    Debug thì thấy bị lỗi ngay chỗ fscanf_s cuối, nó báo lỗi Access violation writing location.... Giờ mình vẫn chưa biết là nên fix chỗ nào, phiền bạn nào chỉ giúp mình. Thanks.
    fscanf_s(fp, "%s %f %f
    ", a.a[i].name, &a.a[i].x, &a.a[i].y); // Dòng bị lỗi
    bị thiếu dấu & thì phải, chỗ &a.a[i].name

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ^ name là pointer rồi.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi HieuApp
    Bạn dùng trình dịch gì?

    - - - Nội dung đã được cập nhật ngày 14-05-2014 lúc 05:39 PM - - -



    fscanf_s(fp, "%s %f %f
    ", a.a[i].name, &a.a[i].x, &a.a[i].y); // Dòng bị lỗi
    bị thiếu dấu & thì phải, chỗ &a.a[i].name
    Thêm dấu & vô rồi cũng vẫn vậy

    - - - Nội dung đã được cập nhật ngày 14-05-2014 lúc 05:54 PM - - -

    Trích dẫn Gửi bởi prog10
    ^ name là pointer rồi.
    Vậy sửa sao bạn?

    - - - Nội dung đã được cập nhật ngày 15-05-2014 lúc 08:18 AM - - -

    Ai giúp mình với Đang cần để hoàn thiện bài tập

 

 

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
  •