c++ - 将空格分隔的txt文件读入数组C++
问题描述
我遇到的问题是我应该7 write 0x01 0x27
从我的 .txt 文件中读取值,并且循环只会运行 1 次,给出输出0 - 7 1 0x01 0x27
(1 表示写入,0 = 读取,2 = 未设置),但是,我用 print 语句打印出来的值显示为
0 - 7 1 0x30 0x78
1 - 1 2 0x00 0x00 //where the 2 is it reads in 0x27 as a string
所以,我试图弄清楚为什么它会读取额外的值,而不仅仅是文件中的值。
void ioLoad(char* name)
{
std::ifstream inF;
inF.open(name, ios_base::in);
int i = 0;
string rw;
while(!inF.eof()){
inF >> var.time[i]; //int time, from struct 'var'
inF >> rw; //string rw, should read either read or write
inF >> std::hex >> var.address[i] //unsigned char address, from struct 'var' >>PROBLEM LINE<<
if (rw == "write")
{
var.state[i] = WRITE; //stores an enum value as the state
inF >> std::hex >> var.value[i]; //unsigned char value, from struct 'var' >>PROBLEM LINE<<
}
printf("%d - %d %d 0x%02X 0x%02X\n", i, var.time[i], var.state[i], var.address[i], var.value[i]);
i++
}
inF.close()
}
任何帮助将不胜感激,如果您需要更多信息,请告诉我。
解决方案
使用 .eof 作为条件是冒险的事情,正如评论你帖子的人告诉你的那样,eof 一直运行到最后一次阅读导致失败。这意味着最后一个动作将运行两次。这是一个很好的帖子: 为什么 iostream::eof inside a loop condition (ie `while (!stream.eof())`) 被认为是错误的?
还有其他选项,例如 while(file >> data) 或检查文件的结尾在哪里并一直运行到那里。
另请注意,如果您在输入文件的每一行之间执行/n,则需要在继续之前“接受它”,否则您的下一个阅读操作将采用它而不是您想要的文本。
推荐阅读
- pandas - 将 csv 中对象形式的数据转换为数据透视表
- java - 在 Camunda BPMN 引擎中传递冗长的文本 - http 连接器
- javascript - 如何使用 Angular 使用 CSS 禁用锚点?
- java - 如何模拟 Cloud Foundry Java 客户端
- java - save() 上的 Spring Boot JPARepository 性能
- php - PHP:如何匹配一系列 unicode 配对代理表情符号/表情符号?
- c# - 文本框为空时如何返回所有值
- node.js - Stripe 不允许将费用与一次性来源的客户相关联
- python - 在字符串内部的列表中迭代字典
- javascript - 如何在传单中动态更改 worldCopyJump 值?