c - 为 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)
解决方案
在 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
推荐阅读
- android - 在 Android 中有没有办法查看/更改电池输出功率和频率
- c# - 自动签署所有编译的输出文件
- angular - 使用角度服务在多个组件中设置超时
- java - 如何从层次结构中至少删除两个级别的任何内容中隐藏 java 包
- postgresql - 如何将 Postgres 数据库从已安装的磁盘复制到实时 Postgres 服务器
- azure-cosmosdb - 当用户容器将 userId 作为分区键时需要唯一的用户名
- for-loop - R Shiny - 使用 for 循环提取矩阵中的对角线元素
- php - 使用 Laravel 5.6 上传多张图片
- android - firestore recyclerView 获取字段并删除数据
- pdf-generation - 在 Migradoc 中移动到下一页时如何消除表格中的水平线