关于c++文件读取(正确输入到变量中)

img


data.txt
4
A 0 1
B 1 100
C 2 1
D 3 101

如何读取才能将上面的数据正确输入到jobs[i].name,jobs[i].starttime,jobs[i].needtime里面


#include<iostream>
#include <fstream>
#include <algorithm>
using namespace std;

typedef struct Job {
    char name[10];      //作业的名字
    int arrivetime;      //作业到达系统时间
    int needtime;       //作业服务时间
    int starttime;      //作业开始执行时间
    int finishtime;        //作业完成时间
    int staytime;        //作业周转时间
    double dqzztime;    //带权周转时间
}Job;
Job jobs[50];

void fcfs(struct Job jobs[50], int n) {
    int start = 0;
    int min = 255;
    int k;
    struct Job tempt;
    for (int j = 0;j < n-1;j++) {
        min = jobs[j].needtime;
        k = j;
        for (int i = j+1;i < n;i++)
        {
            if (jobs[i].needtime < min) {
                min = jobs[i].needtime;
                k = i;
            }
        }
        if (min < jobs[j].needtime) {
            tempt = jobs[j];
            jobs[j] = jobs[k];
            jobs[k] = tempt;
        }
    }
    for (int i = 0;i < n;i++)
    {
        if (i != 0) {
            if (jobs[i].arrivetime >= start) {
                start = jobs[i].arrivetime;
                jobs[i].starttime = start;
                jobs[i].finishtime = jobs[i].starttime + jobs[i].needtime;
                jobs[i].staytime = jobs[i].finishtime - jobs[i].arrivetime;
                
                start += jobs[i].needtime;
            }
            else {
                jobs[i].starttime = start;
                jobs[i].finishtime = jobs[i].starttime + jobs[i].needtime;
                jobs[i].staytime = jobs[i].finishtime - jobs[i].arrivetime;
                
                start += jobs[i].needtime;
            }
        }
        else{
            start += jobs[i].arrivetime;
            jobs[i].starttime = start;
            jobs[i].finishtime = jobs[i].starttime + jobs[i].needtime;
            jobs[i].staytime = jobs[i].finishtime - jobs[i].arrivetime;
            
            start += jobs[i].needtime;
        }
        jobs[i].dqzztime = jobs[i].staytime*1.0 / jobs[i].needtime;
    }
}
void sjf(struct Job jobs[50], int n) {}
void result(struct Job jobs[50], int n) {}

int main()
{
    int n, i; //n个作业
    ifstream infile("data.txt", ios::in);
    if (!infile.is_open()) {
        printf("open error!\n");
        return -1;
    }
    infile >> n;
    /*cout<<"输入作业个数:";
    cin >> n;
    cout<<"输入每个作业的作业名,到达时间,服务时间:"<<endl;*/
    for (i = 0;i < n;i++)
    {
        infile >> jobs[i].name;
        infile >> jobs[i].starttime;
        infile>> jobs[i].needtime;
    }
    cout << endl;
    cout<<"作业名\t到达系统时间\t运行时间\n";
    for (i = 0;i < n;i++)
    {
        cout << jobs[i].name << "\t\t" << jobs[i].arrivetime << "\t\t" << jobs[i].needtime << endl;
    }

}

你已经正确读取了,但是输出的时候写成 jobs[i].arrivetime了


觉得有用的话采纳一下哈

先fgets到字符串,再sscanf分解到三个数组元素