文件流输入和输出

方案一:使用freopen进行输入输出

复制代码
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;
#define MIN 0
#define MAX 9

class Winning_information{
    private:
        string first_price,second_price[2],third_price[5];
    public:
        void get_information();
        void put_information();
};

void Winning_information::get_information()
{ 
    int n=0;
    string number="1871";
    string num[10],numb[10];
    freopen("D:\\1program\\CPP\\data.txt","w",stdout);
    for(int i=0;i<10;i++){
        srand(n);
        num[i]=number;
        for(int j=0;j<7;j++){
            num[i].push_back(MIN+rand()%(MAX-MIN+1)+'0');
            n++;
        }
        num[i].push_back('\n');
    }
    for(int i=0;i<10;i++){
        cout<<num[i];
    }
    freopen("D:\\1program\\CPP\\data.txt","r",stdin);
    for(int i=0;i<10;i++){
        cin>>numb[i];
        numb[i].pop_back();
    }
    //fclose(stdout);
    //fclose(stdin);
    freopen("CON", "r", stdin);
    freopen("CON", "w", stdout);

    int winner[8],x;
    srand((unsigned)time(NULL));
    for (int i = 0; i < 8; i++)
    {
        x = MIN+rand()%(MAX-MIN+1);
        for (int j = 0; j < i; j++)
            while (x == winner[j])
            {
                x = MIN+rand()%(MAX-MIN+1);
                j = 0;
            }
        winner[i] = x;
    }
    first_price=numb[winner[0]];
    for(int i=0;i<2;i++){
        second_price[i]=numb[winner[i+1]];
    }
    for(int i=0;i<5;i++){
        third_price[i]=numb[winner[i+3]];
    }
}

void Winning_information::put_information()
{
    cout<<"The first price is "<<endl;
    cout<<first_price<<endl;
    cout<<"The second price is "<<endl;
    for(int i=0;i<2;i++)
    cout<<second_price[i]<<endl;
    cout<<"The third price is "<<endl;
    for(int i=0;i<5;i++)
    cout<<third_price[i]<<endl;
}

int main()
{
    Winning_information one;
    one.get_information();
    cout<<"请输入任意键"<<endl;
    getchar();
    one.put_information();
    return 0;
}
复制代码

用fclose显示句柄无效,并报错An invalid parameter was passed to a function that considers invalid parameters fatal

尝试将cin与cout重定向到键盘可行

方案二:利用FILE指针与fwrite和fread

复制代码
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;
#define MIN 0
#define MAX 9

class Winning_information{
    private:
        string first_price,second_price[2],third_price[5];
    public:
        void get_information();
        void put_information();
};

void Winning_information::get_information()
{
char b[110]={'0'},a[120]={'\0'};
    srand((unsigned)time(NULL));
    FILE *f=fopen("D:\\1program\\CPP\\data.txt","w");
    for(int i=0;i<10;i++){
        b[11*i]='1';b[11*i+1]='8';b[11*i+2]='7';b[11*i+3]='1';
    }

    for(int i=1;i<=110;i++){
        if((i%11!=4)&&(i%11!=1)&&(i%11!=2)&&(i%11!=3)){
            b[i-1]=(rand()%10+'0');
        }
    }
    for(int i=0;i<10;i++){
        fwrite((b+i*11),sizeof(char),11,f);
        fwrite("\n",1,1,f);
    }
    fclose(f);
    FILE *fp=fopen("D:\\1program\\CPP\\data.txt","r");
    for(int i=0;i<120;i++){
        fread(a,sizeof(char),120,fp);
    }
    fclose(f);

    int winner[8],x;
    srand((unsigned)time(NULL));
    for (int i = 0; i < 8; i++)
    {
        x = MIN+rand()%(MAX-MIN+1);
        for (int j = 0; j < i; j++)
            while (x == winner[j])
            {
                x = MIN+rand()%(MAX-MIN+1);
                j = 0;
            }
        winner[i] = x;
    }
    for(int j=0;j<11;j++){
        first_price.push_back(a[winner[0]*12+j]);
    }
    for(int i=0;i<2;i++){
        for(int j=0;j<11;j++)
        second_price[i].push_back(a[winner[i+1]*12+j]);
    }
    for(int i=0;i<5;i++){
        for(int j=0;j<11;j++)
        third_price[i].push_back(a[winner[i+3]*12+j]);
    }
}

void Winning_information::put_information()
{
    cout<<"The first price is "<<endl;
    cout<<first_price<<endl;
    cout<<"The second price is "<<endl;
    for(int i=0;i<2;i++)
    cout<<second_price[i]<<endl;
    cout<<"The third price is "<<endl;
    for(int i=0;i<5;i++)
    cout<<third_price[i]<<endl;
}
int main()
{
    Winning_information one;
    one.get_information();
    cout<<"请输入任意键"<<endl;
    getchar();
    one.put_information();
    return 0;
}
复制代码

方案三:使用fstream库中的ofstream与ifstream

复制代码
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;
#define MIN 0
#define MAX 9

class Winning_information{
    private:
        string first_price,second_price[2],third_price[5];
    public:
        void get_information();
        void put_information();
};

void Winning_information::get_information()
{
    ofstream out("D:\\1program\\CPP\\data.txt");
    ifstream in("D:\\1program\\CPP\\data.txt");
    int n=0;
    string number="1871";
    string num[10];
    Winning_information one;
    for(int i=0;i<10;i++){
        srand(n);
        out<<number;
        for(int j=0;j<7;j++){
            out<<MIN+rand()%(MAX-MIN+1);
        }
        out<<endl;
        n++;
    }
    for(int i=0;i<10;i++){
        in>>num[i];
    }
    out.close();
    in.close();
    int winner[8],x;
    srand((unsigned)time(NULL));
    for (int i = 0; i < 8; i++)
    {
        x = MIN+rand()%(MAX-MIN+1);
        for (int j = 0; j < i; j++)
            while (x == winner[j])
            {
                x = MIN+rand()%(MAX-MIN+1);
                j = 0;
            }
        winner[i] = x;
    }
    first_price=num[winner[0]];
    for(int i=0;i<2;i++){
        second_price[i]=num[winner[i+1]];
    }
    for(int i=0;i<5;i++){
        third_price[i]=num[winner[i+3]];
    }
}

void Winning_information::put_information()
{
    cout<<"The first price is "<<endl;
    cout<<first_price<<endl;
    cout<<"The second price is "<<endl;
    for(int i=0;i<2;i++)
    cout<<second_price[i]<<endl;
    cout<<"The third price is "<<endl;
    for(int i=0;i<5;i++)
    cout<<third_price[i]<<endl;
}

int main()
{
    Winning_information one;
    one.get_information();
    system("pause");
    one.put_information();
    return 0;
}
复制代码

 

posted @   一直在努力的小笨蛋  阅读(130)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示