作爲一個學校項目的一部分,我希望將庫存* .txt文件轉換爲C++數組,並最終返回到* .txt文件中程序。將C++文本文件轉換爲多維數組問題
該文本文件將以10行代表雜貨故事項目開始,並將包括代表項目名稱,價格和數量的三列。我已經能夠從文件中讀取數據,甚至可以在顯示的每行前添加數字。現在,我希望將文本文件轉換爲字符串數組,以便「員工」用戶可以逐個更改項目,然後將該數組轉儲回* .txt文件。
下面的代碼是我到目前爲止一直在嘗試的。我可以獲取文件中的行數,但似乎無法獲得列數或顯示行中的數據。當我運行程序時,在顯示行(10)和列(0)後,我看到10行空行。
* .txt文件中的列通常由空格分隔。我嘗試了一個標籤,並試圖:while(getline(invFile, lines, '\t');
,這只是導致控制檯顯示我猜測的內存地址,然後崩潰。
不幸的是,我們還沒有深入到調試程序,從教學大綱的角度來看,我不認爲這將會被徹底地覆蓋,所以我不知道如何排除故障。我已經花了幾個小時的時間Google,並且已經到了需要求助的地步。
該項目涉及到很多比這個組件,但我真的被困在這一部分。我不是要求某人爲我做這件事,但如果任何人有任何想法我做錯了什麼,並可以指向我將文本文件轉換爲多維數組的最佳方向,我將非常感激。
謝謝。
#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]'應該可以工作,但是你應該嘗試理解爲什麼。 – msandiford
我看到你的第二句話以後,我的耳朵會打傷幾個小時!我盯着這幾個小時,除了x的數據類型外,其他所有的東西都改變了。我忘記了我用一個整數列表開始,然後更改爲字符串。在之前的測試中,我的陣列尺寸較大。一旦我將它們都移回到10並將x更改爲字符串,則一切都很完美。非常感謝! – jayvee