2017-01-04 2 views
0

Ich habe einen Algorithmus, der zeigen sollte, ob zwei Arrays ähnlich sind oder nicht. Es funktioniert, aber ich weiß nicht, was Größe des Arrays sein sollte.Größe des spezifischen Arrays

Zum Beispiel:

int a[10], i = 0, r = 0, n = 0; 
printf("Enter the amount of numbers in arrays: "; 
scanf("%d", &n); 

printf("Enter the numbers of array: "; 
for (i = 0; i < n; i++) 
{ 
    scanf("%d", &a[i]); 
} 

Wenn ich für Eingabe "n" Variable n = 11, stoppt Programm am Ende. Meine Frage ist: Welche Nummer soll ich auf das Array setzen a [THAT_PLACE] sicher sein, dass dieses Programm mit dem meisten Hardware kompatibel sein wird (ich hörte, dass dies auch aus dem Speicher ab.)

@ UPDATE1:

Ich wählte eine AlkLösung. Aber es funktioniert immer noch nicht. Hier ist mein Code:

int main() 
{ 

int i = 0, temp_a = 0, switch_a = 0, temp_b = 0, switch_b = 0, n = 0; 

printf("Enter the amount of numbers in arrays: "); 
scanf("%d", &n); 
{ 
    int a[n], b[n]; 
    printf("Enter elements of first array: "); 
    for (i = 0; i < n; ++i) 
    { 
     scanf("%d", &a[i]); 
    } 
    printf("Enter elements of second array: "); 
    for (i = 0; i < n; ++i) 
    { 
     scanf("%d", &b[i]); 
    } 
    do 
    { 
     switch_a = 0; 
     for (i = 0; i < n - 1; i++) 
     { 
      if (a[i] > a[i + 1]) 
      { 
       switch_a = switch_a + 1; 
       temp_a = a[i]; 
       a[i] = a[i + 1]; 
       a[i + 1] = temp_a; 
      } 
     } 
    } while (switch_a != 0); 
    //bubble sort 
    do 
    { 
     switch_b = 0; 
     for (i = 0; i < n - 1; i++) 
     { 
      if (b[i] > b[i + 1]) 
      { 
       switch_b = switch_b + 1; 
       temp_b = b[i]; 
       b[i] = b[i + 1]; 
       b[i + 1] = temp_b; 
      } 
     } 
    } while (switch_b != 0); 
    //Cheks, if an arrays are the same. 
    for (i = 0; i < n; i++) 
    { 
     if (a[i] != b[i]) 
     { 
      printf("This two arrays don't have the same elements.\n\n\n"); 
      return 0; 
     } 
    } 

    printf("This two arrays have the same elements.\n\n\n"); 
} 

return 0; 

}

Könnten Sie prüfen es für mich? Ich kann nicht finden, was falsch ist ...

+0

Sie möchten eine Variable Längenfeld, das glücklicherweise ab C99 hat. Lesen Sie vor der Deklaration von 'int a [n]; –

+0

" wie viele Elemente Sie mit der scanf Zeile benötigen "... dieses Programm ist mit den meisten Hardware kompatibel" - Sollte das Programm nicht so geschrieben sein, dass es für die ** Problem ** soll es lösen? – Olaf

+0

Der aktualisierte Code scheint zu funktionieren, wenn Sie das '#include ' hinzufügen. Was ist das Problem? Außerdem klingt das nach einer neuen Frage, die nichts mit der alten zu tun hat. Wenn Sie ein Problem feststellen können, können Sie vielleicht eine neue Frage stellen? –

Antwort

2

Ihr Array a kann nur 10 int 's enthalten. Also, wenn Sie n als 11 eingeben, dann haben Sie undefined behaviour wegen Out-of-Bounds-Zugriff.

Sie können ein C99 VLA (Array variabler Länge) verwenden oder dynamische Speicherzuweisung unter Verwendung der Familienfunktionen malloc() verwenden.

Hinweis: VLAs sind in C11 optional. Sie sollten also überprüfen, ob Ihre Implementierung dies nicht unterstützt, indem Sie das Makro __STDC_NO_VLA__ verwenden.

Ein potenzielles Problem mit VLAs (die automatische Speicherdauer - allgemein bekannt als "Stack") haben, ist es schwierig herauszufinden, ob die Zuordnung für große Arrays erfolgreich ist.

1

Wenn Ihre C-Implementierung in Verwendung variabler Länge Arrays unterstützt, dann nur tun:

int i = 0, r = 0, n = 0; 
printf("Enter the amount of numbers in arrays: "; 
scanf("%d", &n); 

{ 
    int a[n]; 
    printf("Enter the numbers of array: "; 
    for (i = 0; i < n; i++) 
    { 
    scanf("%d", &a[i]); 
    ... 
2

Wenn Sie nicht (oder Sie nicht wollen) VLA verwenden, malloc verwenden: man malloc

Beispiel:

int *buffer; 
int dim; 

printf("Enter the amount of numbers in arrays: "); 
scanf("%d", &dim); 
buffer = (int*) malloc(sizeof(int) * dim); 
if (buffer == NULL) { 
    perror("Malloc error"); 
    exit(-1); 
} 

Mehr auf malloc hier: Stack Overflow: How do malloc() and free() work?

Verwandte Themen