2017-06-20 1 views
0

Ich möchte eine Funktion in c erstellen, die alle 8 Inkremente (um genau zu sein, wenn eine ganze Zahl den Wert 8 hält) einen Absatz/eine neue Zeile (und druckt auch einen Offset)).Create Funktion: Alle 8 Inkremente = ein Absatz

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

In diesem Fall habe ich möchte ein Array bekam ich

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

Nun meine Funktion wie diese

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

Die Funktion 'check_newline' diese Struktur implementieren

Immer wenn die Ganzzahl 'row' den Wert 8 erreicht, wird ein neuer Offset gedruckt und der Wert von 'Zeile' wird auf 0 zurückgesetzt.

Jetzt weiß ich nicht, wie man die return; und mit diesem Code, sieht meine Ausgabe wie diese

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 

(totaly falsch)

Wenn ich die Funktion in meinem Code zu setzen "(so basicaly verwendet keine Funktion), alles ist schön, wegen der fehlenden return-Anweisung.

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 

Ich habe diese Art von Berechnung in meinem Code oft zu verwenden, also eine Funktion mehr glatt sein.

+1

Funktionsargumente werden * durch Wert * übergeben, Sie haben eine * lokale Kopie * Ihrer 'Zeile' in Ihrer Funktion. Tatsächlich * muss * ein Duplikat sein ... (aber ich kann gerade kein passendes finden) –

+0

Bitte den Code einrücken. –

+0

Mögliches Duplikat von [Übergeben in C] (https://stackoverflow.com/questions/2229498/passing-by-reference-in-c) –

Antwort

1

Sie sind über komplizierende Dinge. Sie benötigen die zusätzlichen Variablen nicht, da Sie i und % (Modulo-Operator) verwenden können, um herauszufinden, ob Sie am Anfang oder Ende einer Zeile stehen.

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"); 
    } 
}