Verwendung von Scanf für die Speicherung der Eingabe in 2d-Arrays

Will ich Scannen, Eingabe und speichern Sie es in eine quadratische 2d-array.

Die ersten zwei Ziffern gespeichert werden, in separaten Variablen, die erste Ziffer ist die Zielgröße (hier irrelevant), die zweite Ziffer wird gespeichert in der variable m, d.h. m = 5 in diesem Fall. m ist die Anzahl der Zeilen/Spalten der quadratischen matrix. Der rest der Eingabe gespeichert werden soll in das array.
Für diesen speziellen Eingang, bekomme ich einen segmentation fault und die random zahlen sind gedruckt auf dem Bildschirm.
Ich habe einige printf-Anweisungen zu verfolgen, wo die Dinge schief gehen, und ich bemerkte, dass der index ich in der ersten Runde sprang von 2 bis 11 in einem Szenario, für andere input sprang auf 33.
Vielen Dank für Ihre Hilfe! Ich hoffe, ich bin nicht fehlen, um einen offensichtlichen Fehler.

Eingang: (jede Zeile wird getrennt von den vorhergehenden durch drücken der EINGABETASTE.)

42 5

0 3 7 9 10

9 13 20 5 20

12 11 33 0 12

17 39 22 3 18

Mein code:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char* arv[]){

  int target;               //for later processing, irrelevant here
  int m;                    //m = #rows and #columns of array
  int array[m][m];
  scanf("%d %d", &target, &m);

  int i, k;
  for(i = 0; i < m; i++){
    for(k = 0; k < m; k++){
       scanf("%d", &(array[i][k]));    //save value in array.
    }
  }
                                      //the problem occurs before this point.
  for(i = 0; i < m; i++){
     for(k = 0; k < m; k++){
       printf("%2d", array[i][k]);    //print array.
     }
     printf("\n");
  }  

  return 0;
}
Deklarieren Sie Ihre Arrays variabler Länge m vor m einen sinnvollen Wert. Setzen, dass die Erklärung nach der ersten scanf.
Ich kann nicht glauben, ich verbrachte zwei Stunden versucht, herauszufinden, was falsch ist und fehlt. Vielen Dank!
Nun, den sprichwörtlichen frischen Satz von Augen ...

InformationsquelleAutor Aikynn247 | 2014-10-24

Schreibe einen Kommentar