【问题标题】:Reading from a textfile in a certain format从特定格式的文本文件中读取
【发布时间】:2023-03-04 03:02:01
【问题描述】:

我正在尝试按以下顺序读取文件:0 0 4 (100) 12 (67) 2

这对应于:

进程id、到达时间、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; 
}

【问题讨论】:

  • 这些输入参数都不适合%s,无论是来还是去。您需要一种或另一种形式的数组
  • 如果您扫描 3 个项目,fscanf 将返回 3,如果它成功读取所有 3 个。

标签: c text-files filestream


【解决方案1】:

IMO,最好的方法是

  1. 使用fgets()从文件中读取整行
  2. 使用"()" 作为分隔符对输入进行标记。
  3. 检查令牌是否为非 NULL。
  4. 使用strtol() [或family] 将令牌转换为intlong int

注意;在使用返回的指针之前,请始终检查 fopen() 是否成功。

【讨论】:

    【解决方案2】:

    据我了解,您需要从文件中读取 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
    

    如果 fscanf 返回 7,则所有数字都已读取,并且可以处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      相关资源
      最近更新 更多