fstream的getline()工作了一点...然后中断
fstream's getline() works for a little bit...and then breaks
我有一个文本文件,里面有一堆用换行符分隔的数字,像这样:123.2595.12114.12 等...
问题是,当我的程序读取它时,它只将数字复制到数组中,直到第二个数字,然后用零填充其余元素。我尝试使用分隔符并忽略语句,但没有任何效果。 这是代码。
编辑(这是整个程序:)
#include <iostream>
#include <string.h>
#include <iomanip>
#include <fstream>
using namespace std;
struct utilityInfo
{
char utility[20];
double monthlyExpenses[12];
};
int main(){
utilityInfo Utility[3];
char charray[100];
fstream inFile;
inFile.open("expenses.txt");
inFile.getline(charray, 7);
cout<<charray<<endl;
if(inFile.fail()) cout<<"it didnt work";
for(int i=0; i<12; i++)
{
inFile.getline(charray,20);
Utility[0].monthlyExpenses[i]=atof(charray);
}
for(int z=0; z<12; z++)
{
cout<<Utility[0].monthlyExpenses[z]<<endl;
}
inFile.close();
return 0;
}
以下是文本文件的外观:
207.14
177.34
150.55
104.22
86.36
53.97
52.55
58.77
64.66
120.32
153.45
170.90
输出如下所示:
207.14
177.34
0
0
0
0
0
0
0
0
0
0
文件中的第一个条目"207.14"实际上是"207.14"——(那里有一个空格)。您读取了 7 个字符,但在此处保留了" ",这意味着 istream::getline 在 inFile 上设置了故障位,这意味着您的连续 getline 失败。
要解决此问题,请读取足够多的换行符,删除空格和/或在第一个获取行后清除 inFiles 故障位。
您还应该在 for 循环中添加一个检查,以处理失败/损坏/eof 位可能发生的任何错误。
相关文章:
- 类成员和中断
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 我的代码运行良好,但在游戏循环中中断
- 使用带有MCP23017的 pigpio 进行中断读取
- 为什么我在 AVR 中的中断无法正常工作?
- 使用 UDP 中断 while()-循环
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何在 CompleteAsyncIO 中访问 IOMemoryBufferDescriptor,该描述符通过中断 EP
- 如何为伺服电机创建中断或返回值?
- 开关:无外壳中断
- 如何使用中断停止循环?
- 为什么当我输入一个被接受的数字时,我的 do-while 循环没有中断?
- 在 Ubuntu 中编译 SuiteSparse,在安装 CHOLMOD 时中断
- 在PROGMEM中添加更多数据会中断Arduino Mega 2560上的SPI传输
- 附加到 gdb 会中断并且不会继续该过程
- 使用 shared_ptr 在中断时结束多线程循环
- 为什么布尔值不能比作最后一点?
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 为什么STM32不中断?
- fstream的getline()工作了一点...然后中断