gpt4 book ai didi

c - 在C中读取文本文件,将行分成多个变量

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:14 24 4
gpt4 key购买 nike

我目前正在开发一个模拟各种 CPU 调度方法的程序。目前我有程序要求输入:

printf("Enter type of CPU scheduling algorithm (SJF, RR, PR_noPREMP, PR_withPREMP): ");
scanf("%s", typeOf);

printf("Enter number of processes: ");
scanf("%d", &numPro);

struct processStruct structs[numPro];
int burstTimes[numPro];

for (i = 0; i < numPro; i++) {
printf("Enter process number: ");
scanf("%d", &structs[i].pNum);
printf("Enter arrival time: ");
scanf("%d", &structs[i].arTime);
printf("Enter CPU burst time: ");
scanf("%d", &structs[i].cpuBur);
printf("Enter priority: ");
scanf("%d", &structs[i].prio);
}

除了 typeOf(一个 int)和 numPro(一个 char 数组)这两个变量之外,我还使用了一个数据结构。

这是保存各种参数的数据结构:

struct processStruct {
int pNum;
int arTime;
int cpuBur;
int prio;
int waitTim;
};

我想使用一个文本文件来代替手动输入,该文件的信息与程序的输入信息相同。文本文件看起来像这样:

SJF
4
1 0 6 1
2 0 8 1
3 0 7 1
4 0 3 1

第一行是调度算法的名称。第二行是进程数。以下几行包含每个进程的信息。所以 1 0 6 1 = Process = 1, 0 = Arrival Time, 6 = CPU burst time, 1 = Priority

不幸的是,我对使用 C 语言输入文本文件没有什么经验。有没有人知道如何将文本文件中的数据读入变量和数据结构?

谢谢

编辑:我遇到的问题之一是每一行的数据都不相同。如果它只是 4 行数字那么它会相对容易。我需要程序将第一行读入 char 数组(字符串),将第二行读入 numPro 变量,然后将后续行读入数据结构的多个实例(每个进程一个)。

最佳答案

可以使用 fscanf() 非常简单地读取文件,因为除了第一行标识符之外的所有内容都是数字。但是您确实需要检查从文件中读取的内容的有效性。我刚刚使用 exit(1) 来说明错误,它可能比这更复杂(例如错误消息)。

#include <stdio.h>
#include <stdlib.h>

#define MAX 100

struct processStruct {
int pNum;
int arTime;
int cpuBur;
int prio;
int waitTim;
};

struct processStruct structs[MAX];

int main(int argc, char** args)
{
FILE *fil;
char typeOf[4];
int numPro, i;
if ((fil = fopen("myfile.txt", "rt")) == NULL)
exit(1);
if(fscanf(fil, "%4s", typeOf) != 1)
exit(1);
if(fscanf(fil, "%d", &numPro) != 1)
exit(1);
if(numPro > MAX)
exit(1);
for(i=0; i<numPro; i++) {
if(fscanf(fil, "%d%d%d%d", &structs[i].pNum, &structs[i].arTime,
&structs[i].cpuBur, &structs[i].prio) != 4)
exit(1);
}
fclose(fil);

// test the result
printf("Type: %s\n", typeOf);
printf("Num: %d\n", numPro);
for(i=0; i<numPro; i++) {
printf("%d %d %d %d\n", structs[i].pNum, structs[i].arTime,
structs[i].cpuBur, structs[i].prio);
}
return 0;
}

程序输出:

Type: SJF
Num: 4
1 0 6 1
2 0 8 1
3 0 7 1
4 0 3 1

关于c - 在C中读取文本文件,将行分成多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33974290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com