2017-02-05 2 views
0

Ich schreibe ein Programm, das eine Eingabe von Nullen und Einsen aufnehmen und sie in einem Array zuweisen soll. Dann übergibt es das Array an die Kantenfunktion und formatiert es auf die folgende Weise.Funktion scheint Array nicht zu ändern

  1. ein 1 zu dem Muster Ausgangsbit zuweisen, wenn zwei aufeinanderfolgende Bits (ein Bit, und es ist vorheriger Bit) unterschiedlich sind
  2. ein 0 an den Ausgang Bitmuster zuweisen, wenn zwei aufeinanderfolgende Bit (ein Bit, und es ist vorherige Bit) gleich
  3. Assign 0 zum ersten Ausgangsbit da es keine vorherigen Bit für das erste Bit ist

das Problem ist, dass, wenn die Anordnung mit der Funktion und printf geben wird aufgerufen wird, es einfach ausdrucken S out die ursprüngliche Eingabe. Ich habe es aus verschiedenen Blickwinkeln betrachtet und kann nicht sehen, was falsch ist.

#include <stdio.h> 

void edge(int n, int a1[], int a2[]) 
{ 
    int i = 1; 
    a2[0] = 0; 
    int last = a1[i-1]; 
    printf("%d", a2[0]); 
    for(i = 1; i < n; i++) 
    { 
     if(last == a1[i]) 
     { 
       a2[i] = 0; 
     } 
     else 
     { 
       a2[i] = 1; 
     } 
    printf("%1d", a2[i]); 
} 
} 

int main(void) 
{ 
    int i = 0; 
    int num; 

    int array1[8]; 
    int array2[8]={0}; 

    printf("Enter an 8-digit barcode: \n"); 
    for(i = 0; i < 8; i++) 
    { 
     scanf("%1d", &num); 
     if(num == 1) 
     { 
       array1[i] = 1; 
     } 
    } 
    printf("Output: "); 

    edge(8, array1, array2); 

    return 0; 
} 
+0

Sie aktualisieren den Wert, den Sie in Ihrer Schleife an "last" geben, nicht. Könnte dein Problem dort entstehen? –

+0

Arrays in C (und C++) sind Null schreiben – BadJerry

+0

Was meinst du mit update es? – Dustynana

Antwort

1

Wenn Sie nicht last innerhalb der Schleife aktualisieren, werden Sie immer die Werte in a2[] mit dem gleichen Wert gespeichert zu vergleichen, die scheint nicht Ihr Ziel zu sein. Aktualisierung von last in der Schleife.

void edge(int n, int a1[], int a2[]) 
{ 
    int i; 
    a2[0] = 0; 
    int last; 
    printf("%d", a2[0]); 
    for(i = 1; i < n; i++) { 
     last = a1[i-1]; 
     if(last == a1[i]) 
      a2[i] = 0; 
     else 
      a2[i] = 1; 
     printf("%1d", a2[i]); 
    } 
} 
+0

Sie haben völlig Recht, ich habe das gerade jetzt und es scheint gut zu funktionieren. – Dustynana

+0

wurde letzten komplett los und schaltete es in der Schleife für a1 [i-1], wo die if-Anweisung ist. – Dustynana

Verwandte Themen