如何仅将数字值存储在给定输入文件中的2D数组中?(没有指针)
How do I store only the number values in a 2d array from a given input file? (no pointers)
我正在尝试使用C
读取以下文件约翰逊60 12.50
安妮斯顿65 13.25
库珀50 14.50
Gupta 70 14.75
布莱尔55 10.50
克拉克40 18.75
肯尼迪45 20.50
布朗森60 20.00
阳光65 18.75
史密斯30 9.75
我可以很好地阅读名称,但是我很难阅读该行的其余部分。如您所见,名称可以是任何长度,但最长的是7个字符。由于我试图阅读2D双打,因此我通过忽略了该行的前7个字符来纠正此问题。但是,当我打印数组的内容时,它似乎是在打印内存地址。
我不知道如何使用指针来解决这个问题。store_names
运行完美,在运行后,输出窗口包含正确的名称。问题是我的位置:
read.ignore(7, 'n');
read >> payment[i][j];
cout << payment[j];
它只是打印内存地址。我该如何在名称之后读取两个数字中的payment
数组?
#include <iostream>
#include <string>
#include <array>
#include <cstdlib>
#include <fstream>
using namespace std;
ifstream read;
ofstream write;
void store_names(string a [10])
{
string storage;
read.open("Data.txt"); //open file
if (read.is_open()==true)// check to see if file is open
{
for (int i = 0; i < 10; i++)
{
read >> a[i];
read.ignore(256, 'n');//store file string into array
cout << a[i] << endl;
}
}
}
void store_payments(double payment [10][3])
{
read.open("Data.txt");
if (read.is_open() == true)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 3; j++)
{
read.ignore(7, 'n');
read >> payment[i][j];
cout << payment[j];
}
}
}
}
int main()
{
string name_array[10];
double payment[10][3];
store_names(name_array);
store_payments(payment);
system("pause");
return 0;
}
调用store_payments
时,read
已经打开,并且在文件末尾(假设这些是文件中唯一的东西,我会假设它们是)。您的下一个读取是无效的,因为您处于文件的末尾,没有其他内容可以阅读。您应该努力检查以后阅读的状态,您会看到:
read.ignore(7, 'n');
if (read.good())
{
read >> payments[i][j];
}
您也可以通过检查eof()
来看到此行为:
void store_payments(double payment[10][3])
{
read.open("Data.txt");
if (read.eof())
{
read.clear(); // clear the eof flag
read.seekg(0, ios::beg); // return to top of the file
}
}
,或者您可以在store_names
的末尾关闭文件。
呼叫read.ignore(7, 'n')
时,将忽略7个字符。对于前两个名称,这将正常工作,该名称长7个字符,但是如果您遇到一个没有的名称,您将尝试读取不是double
的东西。同样,如果您在每次阅读后都检查read
的状态,您会看到这一点:
read.ignore(7, 'n');
if (read.good())
{
}
由于您的名称可以是可变长度,因此您应该先阅读整个行,然后筛选它。您可以使用std::getline
来执行此操作:
std::string line;
std::getline(read, line);
现在line
将包含
约翰逊60 12.50
您只需使用std::string
函数即可删除非数字零件,也可以查找空格。您可以将两个函数结合在一起,并假设名称是第一个空间的所有内容, something 是下一个空白的所有东西,而其他东西就是其他一切。
您在打印中看到内存地址的原因是因为您正在打印内存地址。
cout << payment[j];
payment[j]
本质上是指向payment
中第一个元素的指针。您可能打印payment[i][j]
。
- 2D数组来自文本输入,中间有空格
- 如何使用用户输入在C++中正确填充2D数组
- 如何在C++中检查2D数组中负值的输入验证
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 如何将以逗号和空格分隔的整数读取到 2D 数组中?
- 如何在C++函数中声明静态 2D 数组?
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- 我已经阅读了很多关于 2d 数组的信息,但我在作业中使用它时遇到了麻烦
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 获取 2D 数组 c++ 中的所有数字对
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 在 Python 和 c++ 2d 数组初始化之间.这是怎麽?为什么呢?
- 如何打印 2D 字符数组C++
- 如何将数组 2d 作为参数从函数传递并返回数组 2d 此函数
- 数组 2D 多个值
- 创建数组数组 (2D),而无需在 Java 中初始化内部数组
- 如何在C++中将文本文件传输到数组2D
- 从同一类的另一个方法调用数组2D-C++
- 获取地址在数组2d中的位置