2017-06-20 49 views
0

我想在c中創建一個函數,它創建每8個增量(確切地說,當一個整數持有值8)一個段落/新行(並且還打印一個偏移量)。創建功能:每8個增量=一個段落

在這種情況下,我有一個數組

for (int i = 0; i < sizeof(myarray); i++){ 
printf(" %02hhX", myarray[i]); 
} 

現在我想實現這樣的

int row = 0; 
for (int i = 0; i < sizeof(myarray); i++){ 
printf(" %02hhX", myarray[i]); 
check_newline(row); 
} 

函數 'check_newline' 我的函數具有這樣的結構:

void check_newline(int row){ 
     row++; 
     if(row==8){ 
     offset = offset + 8; 
     row= 0; 
     printf("\n%06X", offset);   
     } 
} 

每次,整數「行」達到值8將打印一個新的偏移量和值'row'將被重置爲0.

現在,我不知道如何執行return;而與此代碼,我的輸出看起來像這樣

000008 E0 60 66 64 38 7D E0 60 66 64 38 7D 80000008 80 00 FF FF FF FF FF FF 000010 E0 60 66 64 38 7D E0 60 66 64 38 7D 80000010 80 00 FF FF FF FF FF FF 

(完全以錯誤的)

當我「把我的函數代碼裏」(這樣basicaly不使用功能),一切都不錯,因爲缺少回報聲明。

for (int i = 0; i < sizeof(myarray); i++){ 
    printf(" %02hhX", myarray[i]); 
    row++; 
    if(row==8){ 
    offset = offset + 8; 
    row= 0; 
    printf("\n%06X", offset); 
} 

000000 80 00 FF FF FF FF FF FF 
000008 E0 60 66 64 38 7D E0 60 

我不得不在我的代碼中經常使用這種計算,所以函數會更圓滑。

+1

函數參數通過值*傳遞*,函數內部有''行'的本地副本*。事實上,這*具有*重複...(但我現在找不到合適的) –

+0

請縮進您的代碼。 –

+0

[在C中通過引用傳遞]的可能重複(https://stackoverflow.com/questions/2229498/passing-by-reference-in-c) –

回答

1

你已經過了複雜的事情。您不需要額外的變量,因爲您可以使用i%(模運算符)來計算當您在像這樣的行的開始或結束時。

for (int i = 0; i < sizeof(myarray); i++) { 
    if (i % 8==0) { 
    printf("%06X",i); 
    } 
    printf(" %02hhX", myarray[i]); 
    if (i % 8==7) { 
    printf("\n"); 
    } 
}