我目前在使用C++。我的目標是通過我計劃能夠存儲的一系列步驟來實現A *算法,並列出從點A到點B的最短路徑。C++文件流向量輸入
我的程序將採用命令行方式,這個參數將是一個讀入的文件。給程序一個讀入文件的目的是每個文件都是它自己的「網格」,以供A *處理。網格文件的格式如下:
貨號1 = WIDTH然後貨號2 = HEIGHT
O =開始
* =完成
。 =尚可節點
#=不可逾越的高牆
因此,一個示例格,讓我們把它稱爲「GRID1」,將是:
8 5
o......#
......##
.....###
....####
.......*
所以處理這種情況,當你運行程序,你會通過在「Grid1」中。 從這裏開始,我計劃創建一個文件流並將每個字符讀入一個二維數組/矢量,以嘗試重新創建網格,以便可以擁有位置。例如,在「Grid1」中,字符「o」將位於Array/Vector中的位置[0] [0]處。我試圖實現如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_map>
using namespace std;
int main(int argc, char *argv[])
{
//Checking for CLA
if(argc < 1)
{
cout << "Program must take atleast <1> arguments!" << endl << "1) File to read 2) OPTIONAL: Type of search" << endl;
}
//CLA #1 is the file containing GRID to be read in
string gridTBO = argv[1];
//Start new filestream and open grid file for reading
ofstream gridFile;
gridFile.open(gridTBO);
//Check to make sure we can even open the file before proceeding
if(gridFile.is_open())
{
//To store grid data
vector<string> grid;
grid[0][0].push_back("Hello");
cout << grid[0][0];
}
然而,在關於我「的push_back」,看來,我不能夠打印出或拋擲數據到載體。我主要想要[0] [0] [0] [1] [0] [2]等每個索引來保存每個單獨的字符,以重新創建一個像我通過的網格。
我是不太清楚我做錯了什麼,因爲我對矢量的使用相當缺乏經驗,但是,將數據推入網格的代碼純粹是爲了測試目的。一旦我能夠將一些數據解析到矢量中,然後我想用循環來自動化它,並使用「getline」或類似函數爲我獲取數據。
所以我的主要問題是: 1)爲什麼我的push_back和print out失敗? 2)如何通過循環讀取char字符以防止手動輸入數據?
我收到運行時錯誤是: 分段錯誤(核心轉儲)
謝謝大家提前爲您的幫助和知識!
無自我尊重C++編譯器將編譯'網格[0] [0] .push_back( 「你好」);''時是grid',據稱,一個' std :: vector',沒有大聲吠叫。你的問題聲稱你編譯了這個,並且在運行時崩潰了。這顯然不是真正被編譯的代碼,如果是的話,但這個問題中顯示的代碼是幻想代碼。如果你想要一個真正的問題的真實答案,有必要展示真正的代碼,而不是幻想代碼,[mcve]。此外,在這個問題上,冗長的介紹與任何東西都沒有關係,只是浪費閱讀時間。 –
我的歉意,這實際上是我的代碼,我只是簡單介紹了爲什麼我使用矢量的第一個地方。我希望將來我能提出更好的問題,不管我做錯了什麼,我都會再次道歉,我只是想知道事情是爲什麼而不是在工作。我對使用C++向量相對比較陌生,當你提到它是絕對錯誤時,這就是我的問題,我不明白爲什麼這會是如此「荒謬」和「幻想」 – Illu
荒謬是你聲稱seg錯誤,一些只能在運行時出現的代碼,無法編譯,因此無法運行。我們不能告訴你是什麼導致段錯誤,因爲根據提供的信息,它根本不會發生。這是荒謬的。 – user4581301