Lỗi không tạo file output

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream fi;
    fi.open("input.in");
    int n,m,a[3][2];
    int b[m*n],k=0;
    fi>>n>>m;
    for(int i=0;i<m;i++)
        for(int j=0;j<n;j++) fi>>a[i][j];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            b[k] = a[i][j];
            k++;
        }
    }
    for(int i=m*n;i>0;i--)
    {
        for(int j=0;j<i;j++)
            if(b[j]<b[j+1])
            {
                int tmp;
                tmp = b[j];
                b[j] = b[j+1];
                b[j+1] = tmp;
            }
    }
    fi.close();

    ofstream fo;
    fo.open("output.out");
    for(int i=m*n;i>0;i--)
    {
        fo<<b[i]<<"\t";
        if(i==n+2) fo<<endl;
    }
    return 0;
}

Đoạn code trên để sắp xếp mảng 2 chiều. Nhưng nó lại không tự tạo file output mà khi tự tạo nó cũng trống trơn dù mình đã build nhiều lần. Mấy bạn giúp mình với :disappointed_relieved:

Khai báo ofstream mà lại gọi cout để output thì làm sao thấy gì đó trong file được.

2 Likes

sorry, mà khi mình đã sửa cout thành fo rồi thì vẫn v, nó vẫn không tạo file và khi tự tạo cũng không ghi gì cả.

Bạn phải close file nữa nhé.

2 Likes

fo.close(); lẫn fi.close(); mà vẫn v bạn ơi

Vấn đề của bạn nằm ở đây. C++ nó chạy lần lượt từ trên xuống chứ không phải từ dưới lên. :laughing:

  • Bạn khai báo m, n mà không khởi tạo.

  • Lúc này m, n sẽ có một giá trị trời ơi đất hỡi. Có thể là 0, 1, 1 triệu, . . . Trừ khi bạn debug ròi xem thì mới biết chính xác nó là bao nhiêu :laughing:.

  • Lại khai báo mảng b[m * n]. cực kỳ không nên.

  • Khi đó size của b[] có thể là 0, 1 hoặc trời biết.

  • Nếu size quá bé, bạn sẽ truy cập vào vùng nhớ không được phép. :point_right: break chương trình.

  • Nếu size quá lớn, sẽ tràn stack. :point_right: cũng break chương trình.

  • Còn nữa cuối chương trình thiếu fo.close();.

Cách khắc phục:

  • Dùng cấp phát động.

  • Define sẵn size của b[]. (size phải đủ lớn)

  • Hay tối nhất: Đưa dòng int b[m*n]; xuống dưới dòng fi>>n>>m;. :laughing:

2 Likes

cảm ơn bạn nhiều nha ^^ giá trị m,n mình đã cho vào file in rồi bạn ^^ mình đã khắc phục được rồi, cảm ơn bạn nhiều nha :smiley:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?