从特定格式的文本文件中读取
Reading from a textfile in a certain format
我试图按以下顺序从文件中读取:0 0 4 (100) 12 (67) 2
这对应于:
进程 ID,arrival_time,1st_CPU_burst,(1st_IO_burst),2nd_CPU_burst,(2nd_IO_burst)
这与操作系统基础知识有关我正在尝试使用队列执行 fcfs 调度,但在我这样做之前我必须正确阅读。
在我的代码中,我试图只读取带有括号的数字并打印相同的输入,例如 (200),但它不起作用,因为它不识别括号。这是为了调试目的,但我将遵循上面的格式。
代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
char input;
char b1;
char b2;
FILE *f = fopen("CPULoad.dat", "r");
while(fscanf(f, "%s%s%s", &b1, &input, &b2) == 1)
{
printf("%s%s%s", &b1, &input, &b2);
}
return 0;
}
IMO,最好的方法是
- 使用
fgets()
从文件中读取整行
- 使用
"()"
作为分隔符对输入进行标记。
- 检查令牌是否为非 NULL。
- 使用
strtol()
[或family]将令牌转换为int
或long int
。
注意;在使用返回的指针之前,始终检查 fopen()
是否成功。
据我所知,您需要从文件中读取 7 个数字,因此您的 fscanf 应该如下所示
fscanf(f, "%d %d %d (%d) %d (%d) %d", &process_id, &arrival_time, &_1st_CPU_burst, &_1st_IO_burst, &_2nd_CPU_burst, &_2nd_IO_burst, &other) == 7
if fscanf returns 7 所有数字都读完了,可以处理了。
我试图按以下顺序从文件中读取:0 0 4 (100) 12 (67) 2
这对应于:
进程 ID,arrival_time,1st_CPU_burst,(1st_IO_burst),2nd_CPU_burst,(2nd_IO_burst)
这与操作系统基础知识有关我正在尝试使用队列执行 fcfs 调度,但在我这样做之前我必须正确阅读。
在我的代码中,我试图只读取带有括号的数字并打印相同的输入,例如 (200),但它不起作用,因为它不识别括号。这是为了调试目的,但我将遵循上面的格式。
代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
char input;
char b1;
char b2;
FILE *f = fopen("CPULoad.dat", "r");
while(fscanf(f, "%s%s%s", &b1, &input, &b2) == 1)
{
printf("%s%s%s", &b1, &input, &b2);
}
return 0;
}
IMO,最好的方法是
- 使用
fgets()
从文件中读取整行
- 使用
"()"
作为分隔符对输入进行标记。 - 检查令牌是否为非 NULL。
- 使用
strtol()
[或family]将令牌转换为int
或long int
。
注意;在使用返回的指针之前,始终检查 fopen()
是否成功。
据我所知,您需要从文件中读取 7 个数字,因此您的 fscanf 应该如下所示
fscanf(f, "%d %d %d (%d) %d (%d) %d", &process_id, &arrival_time, &_1st_CPU_burst, &_1st_IO_burst, &_2nd_CPU_burst, &_2nd_IO_burst, &other) == 7
if fscanf returns 7 所有数字都读完了,可以处理了。