【发布时间】:2014-05-10 09:41:58
【问题描述】:
作为学校项目的一部分,我想将库存 *.txt 文件放入 C++ 中的数组中,并最终在程序的稍后部分返回 *.txt 文件。
文本文件以 10 行开始,代表杂货店商品,并包括代表商品名称、价格和数量的三列。我已经能够从文件中读取,甚至在显示的每一行前面添加数字。现在,我想将文本文件放入一个字符串数组中,以便“员工”用户可以一次更改一个项目,然后我可以将该数组转储回 *.txt 文件中。
下面的代码是我迄今为止一直在尝试的。我可以获得文件中的行数,但似乎无法计算列数或显示的行中的数据。当我运行程序时,在显示行 (10) 和 Cols(0) 之后,我得到了 10 个空行。
*.txt 文件中的列通常用空格分隔。我尝试了一个选项卡,然后尝试:while(getline(invFile, lines, '\t'); 这只是导致控制台显示我猜测的内存地址然后崩溃。
不幸的是,我们在调试程序方面还没有走得太远,而且从教学大纲的角度来看,我认为不会很彻底地涵盖这一点,所以我不知道如何进一步排除故障。在过去的几个小时里,我一直在谷歌上搜索,并且已经到了我真正需要寻求帮助的地步。
该项目涉及的不仅仅是这个组件,但我真的被这部分困住了。我不是要求有人为我做这件事,但如果有人知道我做错了什么并且可以指出我将文本文件放入多维数组的最佳方向,我将不胜感激。
谢谢。
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <sstream>
#include <array>
int row = 0;
int col = 0;
using namespace std;
int main()
{
string lines;
int x;
string textArray[2][2];
ifstream invFile;
invFile.open("inventory.txt");
if(invFile.fail()){
cerr << "The file cannot be opened!";
exit(1);
}
cout << "\n" << endl;
while(invFile.good()) {
while(getline(invFile, lines)) {
istringstream streamA(lines);
col = 0;
while(streamA >> x) {
cout << x;
textArray[row][col] = x;
col++;
}
row++;
}
}
invFile.close();
cout << "Rows: " << row << endl;
cout << "Cols: " << col << endl;
cout << "\n" << endl;
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
cout << "Line: " << i << textArray[i][j] << ".";
}
cout << "\n";
}
return(0);
}
=============================
inventory.txt:
Apples 1.25 20
Oranges 1.75 20
Kiwi 2.50 15
Pineapples 5.50 20
Tomatoes 1.50 20
Onions 2.00 20
Corn 1.80 20
Carrots 2.30 20
Milk 4.50 20
Cheese 2.25 20
【问题讨论】:
-
我可以看到两个问题。第一个是变量
x的类型。它应该是string,例如,“Oranges”不能解析为数字,并且会导致while(streamA >> x)在第一次尝试时失败。第二个问题是textArray的声明。这两个数组边界都不足以存储您拥有的数据。使用textArray[20][3]应该可以,但您也应该尝试了解原因。 -
当我看到你的第二句话时,我觉得我的额头要疼好几个小时了!我盯着这个看了好几个小时,左右改变了一切,除了 x 的数据类型。我忘了我是从一个整数列表开始的,然后改为字符串。在之前的测试中,我的数组大小更大。一旦我将它们都移回 10 并将 x 更改为字符串,一切正常。非常感谢!
标签: c++ arrays multidimensional-array text-files getline