我在做我最後的項目我的算法課程C.對於這個項目,我們必須採取一個包含像行輸入文本文件:所有對象具有相同的名稱
P|A|0
或
E|0|1|2
前者表示要添加到我們在程序中使用的圖形的頂點,第2個標記是頂點的名稱,最後一個標記是它在圖的頂點[]數組中的索引結構。
我有一個逐行循環的程序,它需要第一個標記來決定是創建一個頂點還是一個邊,然後相應地繼續。
當我完成文件遍歷時,我打電話給我的show_vertices函數,它只是一個for循環,按順序打印每個名稱(g-> vertices [i] .name)。
問題是,在名稱應該在輸出(%s)中,我不斷收到我收集的最後一個「token1」。在我使用的特定輸入文件的情況下,恰好是列表中最後一個邊的源節點......這很奇怪,因爲之後還有另外兩個值通過strtok()函數傳遞。該文件中的行如下所示:
E|6|7|1
它從索引6到7創建一個權重爲1的邊。邊緣正常。但是當我用%s調用任何printf
時,它會出現「6」。而不管。
這是文件遍歷。
fgets(currLn, sizeof(currLn), infile);
maxv = atoi(currLn);
if(maxv = 0)
{
//file not formatted correctly, print error message
return;
}
t_graph *g = new_graph(maxv, TRUE);
while((fgets(currLn, sizeof(currLn), infile)) != NULL)
{
token1 = strtok(currLn, "|");
key = token1[0];
if(key == 'P' || key == 'p')
{
token1 = strtok(NULL, "|");
if(!add_vertex(g, token1))
{
//file integration fail, throw error!
return;
}
//***If I print the name here, it works fine and gives me the right name!****
continue;
}
if(key == 'E' || key == 'e')
{
token1 = strtok(NULL, "|");
token2 = strtok(NULL, "|");
token3 = strtok(NULL, "|");
src = atoi(token1);
dst = atoi(token2);
w = atoi(token3);
if(!add_edge(g, src, dst, w))
{
//file integration fail, throw error
return;
}
continue;
}
else
{
//epic error message because user doesn't know what they're doing.
return;
}
}
如果我運行show_vertices
在這裏,我得到:
0. 6
1. 6
2. 6
etc...
有很多它,我不確定什麼是相關的張貼在這裏。 – btzmacin
這還不夠清楚。標記是什麼意思的方式? – longbkit
@Dhaivat說了些什麼,儘管有些人(不是我)可能會反對他的措辭,這是正確的。沒有看到你的一些代碼,我們無法幫助你。但是,儘量避免將所有代碼傾倒在我們身上。嘗試將其縮小到一個最小的例子,以展示您遇到的相同錯誤/問題。你可能會以這種方式解決它,如果你不能,我們一定會有更容易的時間幫助你。 –