30/09/2018, 16:24

[Hỏi] Cách sử dụng freopen trong C++

Em làm bài, yêu cầu có file .INP và file .OUT
Ông thầy xem lại tài liệu C++ (ông thầy dạy đội tuyển tin, nhưng dạy Pascal mãi nên chẳng nhớ về C++ mấy) thì thấy ghi là thêm 2 dòng

freopen("E:\Dev-C\Project\DAYSO.INP", "r", stdin); // address của file source
freopen("E:\Dev-C\Project\DAYSO.OUT", "w", stdout); 
// Tất nhiên là dùng notepad để tạo file DAYSO.INP trước

Thế nhưng lại báo lỗi stdin, stdout, freopen not declared, mọi người giúp em với

... viết 18:35 ngày 30/09/2018

Trong C++ thì thử thay stdin thành cin, stdout thành cout xem thử.

Gió viết 18:31 ngày 30/09/2018

Cái này là hàm của C trong stdio.h
Nếu em muốn chuyển sang C++ bỏ .h ở cuối thêm c vào trước

c                                            c++
#include <stdio.h>                   #include <cstdio>
#include <stdlib.h>                  #include <cstdlib>
#include <math.h>                    #include <cmath>
#include <string.h>                  #include <cstring>
#include <ctype.h>                   #include <cctype>
....
nhatlonggunz viết 18:31 ngày 30/09/2018

E:\Code Block\Project\C++\DAYSO\main.cpp|40|error: invalid user-defined conversion from 'std::istream {aka std::basic_istream<char>}' to 'FILE* {aka _iobuf*}' [-fpermissive]|

E:\Code Block\Project\C++\DAYSO\main.cpp|41|error: invalid user-defined conversion from 'std::ostream {aka std::basic_ostream<char>}' to 'FILE* {aka _iobuf*}' [-fpermissive]|

Hic, em khai báo thư viện cstdio thì nó báo tiếp lỗi này ạ

Gió viết 18:34 ngày 30/09/2018

post code lên xem

nhatlonggunz viết 18:34 ngày 30/09/2018
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <cstdlib>
using namespace std;

void InputArr(int A[], int n)
{
    for(int i = 0; i < n; i++){
        cin >> A[i];
    }
}

int CheckFiArr(int A[], int n)
{
    int count = 2, max = 0;
    for(int i = 1; i < n - 2; i++){
        for(int j = i; j < n; j++){
            if(A[j] + A[j - 1] != A[j + 1]){break;}
            if(A[j] + A[j - 1] == A[j + 1]){
                count++;
                max = count > max ? count : max;
            }
        }
        count = 2;
    }
    return max;
}

int main()
{
    freopen("E:\\Code Block\\Project\\C++\\DAYSO.INP", "r", cin);
    freopen("E:\\Code Block\\Project\\C++\\DAYSO.OUT", "w", cout);

    int n, A[30000]; // Day A co n phan tu;

    cin >> n; // dong dau nhap n
    InputArr(A, n); // Nhap n so nguyen

    cout << CheckFiArr(A, n) << endl;

    getch();
    return 0;
}

Và đây là thư mục

Gió viết 18:26 ngày 30/09/2018
FILE * freopen(const char * filename,const char * mod, FILE * stream);
// thay cin =stdin,cout=stdout 

Nếu đã dùng freopen rồi thì đọc từ file chứ dùng cin,cout làm gì?

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cassert>
using namespace std;

// khai báo file nhập xuất tại đây
FILE *inp,*out;
void InputArr(int A[], int n)
{
    for(int i = 0; i < n; i++){
        //cin >> A[i];
        fscanf(inp,"%d",A+i);
    }
}

int CheckFiArr(int A[], int n)
{
    int count = 2, max = 0;
    for(int i = 1; i < n - 2; i++){
        for(int j = i; j < n; j++){
            if(A[j] + A[j - 1] != A[j + 1]){break;}
            if(A[j] + A[j - 1] == A[j + 1]){
                count++;
                max = count > max ? count : max;
            }
        }
        count = 2;
    }
    return max;
}

int  A[30000]; // mảng kích thước lớn đển ở ngoài chương trình con tránh segment fault
int main()
{
    inp=freopen("E:\\Code Block\\Project\\C++\\DAYSO.INP", "r", stdin);
    out=freopen("E:\\Code Block\\Project\\C++\\DAYSO.OUT", "w", stdout);
    assert(inp!=NULL && out!=NULL); // kiem tra 2 file co rong không  
    int n; // Day A co n phan tu;
    

    //cin >> n; // dong dau nhap n
    fscanf(inp,"%d",&n);
    InputArr(A, n); // Nhap n so nguyen

    //cout << CheckFiArr(A, n) << endl;
    fprintf(out,"%d", CheckFiArr(A, n));
    return 0;
}

nhatlonggunz viết 18:31 ngày 30/09/2018

Rồi nó lại bị thế này này chị

Gió viết 18:32 ngày 30/09/2018

Đường dẫn file bị sai xem lại đường dẫn DAYSO.INP đi

inp=freopen("E:\\Code Block\\Project\\C++\\DAYSO\\DAYSO.INP", "r", stdin);
out=freopen("E:\\Code Block\\Project\\C++\\DAYSO\\DAYSO.OUT", "w", stdout);

not

nhatlonggunz viết 18:38 ngày 30/09/2018

Hic, lần đầu đụng tới file, cám ơn mọi người nhiều lắm

Nguyễn Minh Dũng viết 18:32 ngày 30/09/2018

Chắc do cái avatar của gió dễ thương quá nên mọi người nhầm lẫn.

@nhatlonggunz chăm chỉ lắm

Bài liên quan
0