不工作我是C語言的情況,我有結構如下圖下:while循環如預期在C
struct afreq
{
unsigned char sym;
int freq;
short int left,right;
};
struct afreq data[512] ;
編寫的代碼的編譯後形成這種類型的結構:
[a 0 0 0]
[b 1 0 0]
[z 1 b a]
[c 2 0 0]
[d 3 0 0]
[z 3 c z]
[e 4 0 0]
[z 6 z d]
[z 10 z e]
是第一個元件是「SYM」第二個是「頻率」和第三是「左」和第四是「正確的」。
現在我要做的是:
從最後一個元素開始(這是[Z 10 Z E - ])我必須去所有這些元素,其「左」和「右」均爲零。我還必須計算它們與最右邊元素的距離(用「零」數表示,我的意思是假設如果我們看到上面的結構,我們在sym =「e」處有left = right =「0」將是「00」,因爲它是遠離最右邊元素的3個元素)。
所以輸出必須是這樣的:
e= 00
d= 000
c= 0000
b= 00000
a= 000000
我對實現它是如下(不工作)代碼:
i=dataSize-1; //you can see the output below to know it's value, which is exactly
//corresponding to the element matrix i have taken above at starting.
printf("before i:%d\n");
do{
char temp[30];
strcpy(temp, var);
strcat(temp, "0");
printf("\ntemp: %s ", temp);
printf("sym :%c \n", data[i].sym);
printf("Valuse of i:%d\n",i);
i=i-1;
} while(data[i].left==0 && data[i].right==0);
輸出與之相對應的是(這預計不會):
[a 0 0 0] [b 1 0 0] [z 1 b a] [c 2 0 0] [d 3 0 0] [z 3 c z] [e 4 0 0] [z 6 z d] [z 10 z e]
data size 9
before i:2
temp: 0
sym :z //and it prints the last element whereas it's
left and right child are not zero
Valuse of i:8
請問任何人請解釋我應該如何改變我的代碼以獲得願望輸出? (我是初學者程序員)
首先,你應該擺脫'break'語句,因爲它可以防止你的'do while'循環被執行多次! – Toby
@Toby \t 我刪除了中斷,輸出仍然是相同的,但爲什麼它進入第一個元素,即使我們沒有left = right = 0。我們可以看到,對於第一個索引,我們有[z 10 z e]而不是[z 10 0 0] – user3206225
請說明你的代碼應該輸出什麼。我不明白你應該得到每個符號背後的邏輯。 –