首页 > 解决方案 > 为 C 中的每一行读取 2 个值的文本文件

问题描述

我正在尝试制作一个从标准输入读取文本文件的程序,该文件每行有 2 个值,例如 300 1941, 301 1942 一个值应该分配给变量adr,另一个值应该分配给instr。我将如何创建一个打开文件的函数,通过 while 循环从开头读取到 EOF 并通过每次迭代将这些值分配给变量?

到目前为止我所做的

void load_program(struct machine *m){

  unsigned int adr, instr;

  //something that iterates through the file and adds the values to the 
variables)

标签: ctextwhile-loopscanfeof

解决方案


在 C 中,标准输入可通过全局stdin文件句柄获得,因此无需单独打开文件。

要从标准输入读取整数对,您可以简单地使用fscanf(...)函数,例如:

// pairs.c
#include <stdio.h>

int main()
{
  int addr, instr;
  while (fscanf(stdin, "%d %d", &addr, &instr) == 2) {
    printf("OK: addr=%d, instr=%d\n", addr, instr);
  }
  return 0;
}

您可以通过管道或将文件重定向到已编译的程序,例如:

$ echo -e "11 22\n33 44\n55 66" | ./pairs
OK: addr=11, instr=22
OK: addr=33, instr=44
OK: addr=55, instr=66

$ echo -e "111 222\n333 444\n555 666\n777 888" > input.txt
$ ./pairs < input.txt
OK: addr=111, instr=222
OK: addr=333, instr=444
OK: addr=555, instr=666
OK: addr=777, instr=888

推荐阅读