我有一份学校作业,我认为应该相对简单,但我现在花了5个小时才完成这部分,并且无法弄清楚我需要做什么。我试图将文件中每行的3个整数导入3个不同的数组。每行都有一个ID号,商店号和订购数量。我想将它们存储在3个数组中,其中相同的索引将处理从文本文件中相同行获取的整数。
建议我从各个其他地方说来使用stringstream
或vector
,我以前都没用过,我认为在课堂上此时不需要。我的代码目前是:
bool loadArrays(const char* fileName, long idArray[], int storeArray[], int qtyArray[], int &count, int maxCells)
{
count = 0;
ifstream fileIn;
fileIn.open("data.txt");
int x = 0;
while ((fileIn.get()) && (x < maxCells))
{
fileIn >> idArray[x] >> storeArray[x] >> qtyArray[x];
count++;
x++;
std::cout << idArray[x] << endl;
}
fileIn.close();
return true;
}
它循环通过罚款。我通过引用传递count变量并在运行此函数后将其打印出来,它给了我20
。但是,上面的cout << idArray[x]
行每次只显示0
,因为我没有正确导入数据?
我可能导致数据输入错误,现在这很好,但即使如此,我也不应该在idArray [0]中获得至少一些数据? data.txt的第一行是&#39; 16724 27 134&#39;所以idArray [0]应该= 16724,是吗?我认为>>
将导入整数,直到它遇到空格,所以数字如上所述间隔开意味着该行应该每行进入3个数组吗?
我应该指出我现在正在网上学习这门课程,看看我喜欢编程,而我的老师实际上并不会说英语,所以我现在就自己学习这个。
答案 0 :(得分:0)
您正在读取数组的位置x,并打印出位置x + 1(这些行之间的x ++),这显然是空的。
尝试在递增x之前进行打印,如下所示:
fileIn >> idArray[x] >> storeArray[x] >> qtyArray[x];
std::cout << idArray[x] << endl;
count++;
x++;
答案 1 :(得分:0)
您在不使用其返回值的情况下调用fileIn.get()
。 get()
方法从流中提取字符并返回它,它不会检查流中是否还有字符。
您应该将实际的输入操作放在循环参数中,因为这是检查流是否执行成功读取的更好方法:
while ((fileIn >> idArray[x] >> storeArray[x] >> qtyArray[x]) && (x < maxCells))
另外,正如评论中指出的那样,您在打印x
之前递增idArray[x]
,因此它会跳过第一个索引。在插入后放置x++
。