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;
}
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie nicht initialisiert den Wert
m
vor dem erstellenarray[m][m]
. Ohne initialisieren, wird der Wert vonm
kann alles sein.Ändern:
zu
InformationsquelleAutor user1336087
Dies ist der Ort, wo Sie Durcheinander.
Hier
m
nicht initialisiert ist, und erstellen Sie ein array vonm*m
Elemente. Sie müssenm
initialisiert ist, bevor der Deklaration des Arrays. So verschieben Sie die array-Deklaration nach derscanf
nur, nachdem er, so dassm
wird initialisiert, bevor Sie deklarieren des Arrays.InformationsquelleAutor Spikatrix