如何交替从文件中获取一行数据和一个整数?
How can I alternate taking one line of data from a file and one integer?
>我正在尝试从一个文件中提取数据并将每一行添加到交替行中。示例.txt文件:
123 Main
500 555橡子
1500 23史密斯维尔
1540
我有一个地址数组来保存字符串和 amountdue 数组来保存整数。理想情况下,地址[0]包含"123主",到期金额[0]包含500,依此类推。
我为此制作的函数使用 getline 来获取字符串并适用于第一个循环,但 inputFile>> amountDue[0] 接收的整数超过 500 个整数。它需要 500 555,然后下一个 getline 需要 "Acorn",下一个输入文件>>金额到期 [1] 需要 1500 23。
void loadArrays(string address[], double amountDue[], const int SIZE)
{
//Open file for data laoding
ifstream inputFile;
inputFile.open("Prog3Input.txt");
for (int i = 0; i < SIZE; i++)
{
getline(inputFile,address[i]);
inputFile >> amounDue[i];
}
}
我期望: 字符串地址[0] 是 "123 Main"int amountDue[0] 是 500 地址 [1] 是 "555 Acorn">
金额到期 [1] 是 1500
ETC。
我得到: 地址[0] 是 "123 主要" 金额到期[0] 是 500 555 地址[1] 是 "橡果"
金额到期[1] 是 1500 23
ETC
inputFile>> amountDue[0] 接收的整数超过 500。需要 500 555
不,它没有。这不是operator>>
的工作方式。它停止读取不适合整数的第一个字符,其中包括空格和换行符。
因此,它只读取 500,然后下一个getline()
完成整数行并返回一个空白字符串,然后下一个>>
读取地址行的编号,然后下一个getline()
完成地址行。等等。
也就是说,您的代码不考虑每个整数后面的换行符。您需要通过以下方式之一更新代码:
-
使用
std::istream::ignore()
跳过该行的其余部分,直到换行符。#include <string> #include <fstream> #include <limits> void loadArrays(std::string address[], double amountDue[], const int SIZE) { //Open file for data loading std::ifstream inputFile("Prog3Input.txt"); for (int i = 0; i < SIZE; i++) { std::getline(inputFile, address[i]); inputFile >> amountDue[i]; inputFile.ignore(std::numeric_limits<std::streamsize>::max(), 'n'); } }
现场演示
-
始终使用
std::getline()
读取每一行,然后使用std::istringstream
分析整数。#include <string> #include <fstream> #include <sstream> void loadArrays(std::string address[], double amountDue[], const int SIZE) { //Open file for data loading std::ifstream inputFile("Prog3Input.txt"); std::string line; for (int i = 0; i < SIZE; i++) { std::getline(inputFile, address[i]); std::getline(inputFile, line); std::istringstream(line) >> amountDue[i]; } }
现场演示
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如果变量数据包含大于 vector 所有元素的整数,则仅在视觉工作室上接收"矢量下标超出范围"?
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 什么是 16 字节有符号整数数据类型?
- 将整数的二进制数据转换为浮点数
- 累积从 C++11 中的文件中读取数据的整数
- 如何交替从文件中获取一行数据和一个整数?
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- C++11 中是否有实际的 4 位整数数据类型
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 在基于范围的循环范围内的双/整数使用和数据缩小
- C++:如何将 32 位数据转换为有符号整数
- 从串行端口(带整数的字符串)解码数据
- 是否有一些有意义的统计数据来证明保持有符号整数算术溢出未定义是合理的
- 如何将自己的链表实现从存储整数更改为存储个人数据
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- QuickSort无法始终如一地对100 000个整数的数据集进行排序
- 数据的所有组合都是产品的两个整数
- 如何在C++中对大数据整数进行加法、求和、乘法和除法运算