在C中每行读取具有2个值的文本文件

时间:2018-09-25 21:39:32

标签: c text while-loop scanf eof

我正在尝试编写一个从stdin读取文本文件的程序,该文件每行具有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)

1 个答案:

答案 0 :(得分:1)

在C语言中,可通过全局stdin文件句柄使用stdin,因此无需单独打开文件。

要从stdin中读取整数对,您可以简单地使用fscanf(...) function,例如:

// 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