Problem mit Array befüllen
-
Hallo, ich hoffe ihr könnt mir helfen, bin noch ein C Neuling.
ich möchte ein Programm schreiben dass dem Benutzer ermöglicht einen Array gewünschter Größe zu erstellen, und anschließend auch zu Befüllen.
Es sollen auch noch weiter Dinge möglich sein, aber dabei bin ich noch nicht, bzw hab ich keine Probleme.
Die Arraygröße zu bestimmen ist noch kein Problem.
Aber das befüllen tut er nur bis zum 3ten Wert. Wenn ich den eingeben will, stürzt das Programm ab.
Hier mein bisheriger Code#include <stdio.h> #include <stdlib.h> int main() { int r; int size=0; int *array; begin: printf ("Suchen sie sich einen der folgenden Befehle aus: \n"); printf(" 1) Feldgroesse festlegen 2) Zahlen von Tastur einlesen \n 3) Zufallszahlen generieren 4) Feld sortieren \n 5) Zahl suchen 6) Feld ausgeben \n 7) Programm beenden \n"); scanf("%d", &r); if (r == 1) { printf(" Geben sie bitte die Laenge des Feldes an! \n"); scanf("%d", &size); array = (int *) malloc(size *sizeof(int)); if(array != NULL) { printf("\n Die Feldgroesse wurde nun gesetzt! \n"); } goto begin; } if( r==2 ) { int z; printf(" Geben sie nun die gewuenschten Zahlen ein:\n"); for(z=0;z<size;z++) { printf("%d", z); printf(". Zahl:"); scanf("%d", array[z]); printf("\n"); if(z>size+1) printf("Das Feld ist nun voll!\n"); } goto begin; } if(r == 6) { printf("Diese Funktion ist noch nicht implementiert!\n"); goto begin; } if(r == 7) exit(0); if(r>7) printf("Bitte geben sie eine Gueltige Zahl zwischen 1 und 7 ein! \n"); goto begin; getchar(); return 0; }
-
Koordiniert euch in der Klasse mal besser dann stellt ihr eure Hausaufgabe auch hier nicht parallel ein, d.h. siehe Parallelfrage.
-
1. Sind in keiner KLasse
2. Hab doch nicht die gleichen Probleme wie er
3. Das ist leider auch keine Hilfe...
-
Hammer ... des ist echt so quasi des gleiche
... sogar der gleiche Fehler
Guggst du Zeile 37 >> scanf("%d", &array[z]);
-
ahh super danke,
hätte noch eine frage, zur ausgabe des arrays
jetzt gibt er nur eine ganz komische zahl aus, wie muss ich es denn richtig schreiben? wenn ich das [z] hinter array weglasse gibt er nur den letzten wert aus.if(r == 6) { for(z=0;z<size;z++) { printf("%d",z); printf(".Feld:"); printf("%i", array[z]); printf("\n"); goto begin; }
-
zunächst mal ist jedes printf eine Anweisung. Drum solltest du die geschweiften Klammern bei der for-Schleife nicht vergessen. Aber es geht auch kürzer:
for(z=0;z<size;z++) printf("%d. Feld: %d\n", z, array[z]);
-
hab mich verschrieben, mit dem [z] hint array gibt er nur den letzten wert aus, und ohne halt irgendeine unlogische zahl, wie löse ich das problem den hier am besten?
-
danke, für die hilfe, aber so gibt er leider weiterhin nur den letzten im programm eingetragenen wert des arrays aus
ich weiß nicht wo ich was verändern muss, damit sich das ändert
-
Kann es sein, dass das Programm schon beim Array befüllen einen Fehler macht?
Habs jetzt zwar hingekriegt dass er alle werte des arrays ausgibt, aber der wert der bei [0] eingegeben wurde landet im letzten und der rest ist dann einfach mit zufälligen zahlen gefüllt?
Hat jemand noch ne idee??
-
Ich hab mal deinen Code etwas eingerückt und optisch verbessert. Ich komm nämlich nicht damit zurecht
#include <stdio.h> #include <stdlib.h> int main() { int r, z; int size=0; int *array = NULL; do { printf("Suchen sie sich einen der folgenden Befehle aus:\n"); printf(" 1) Feldgroesse festlegen\n"); printf(" 2) Zahlen von Tastur einlesen\n"); printf(" 3) Zufallszahlen generieren\n"); printf(" 4) Feld sortieren\n"); printf(" 5) Zahl ausgeben\n"); printf(" 6) Feld ausgeben\n"); printf(" 7) Programm beenden\n"); scanf("%d", &r); switch(r) { case 1: { printf(" Geben sie bitte die Laenge des Feldes an! \n"); scanf("%d", &size); array = (int *) malloc(size *sizeof(int)); if(array != NULL) { printf("\n Die Feldgroesse wurde nun gesetzt! \n"); for(z=0; z<size; ++z) array[z] = 0; } } break; case 2: { printf(" Geben sie nun die gewuenschten Zahlen ein:\n"); for(z=0; z<size; ++z) { printf("%d. Zahl: ", z+1); scanf("%d", &array[z]); } printf("Das Feld ist nun voll!\n"); } break; case 6: { for(z=0;z<size;z++) printf("%d. Feld: %d\n", z+1, array[z]); } break; } } while(r < 7); if(array != NULL) free(array); getchar(); return 0; }
-
ja ich weiß sah nich so sehr sauber aus
erstmal danke für deine mühe
aber wieso spuckt der code bei mir nen fehler aus?
"NULL" undelcared (first use in this function) in zeile 5
-
Ich war so freundlich, dir noch die Headerdateien oben einzubinden :p
-
mhm, darauf hät ich auch mal selber kommen können -.-
danke
-
Hallo, ich hätte noch eine weitere frage, in das programm soll eine bubblesort funktion eingebaut werden.
An letzter Stelle des Arrays soll die größte Zahl stehen und an erster die kleinste. Dies soll durch 2 in einander geschachtelte for-schleifen gelöst werden.
Hatte das Programm soweit, dass er nur die kleinste Zahl an erste stelle geschoben hat mittlerweile tut er das aber leider auch nicht mehr, sondern gibt entweder nur die gleiche zahl aus, oder irgendeine komische zahl die funktion sieht im moment so aus:int bubble(int array[z]){ int a,b,temp; for (a = 0 ; a < size; a++) { for (b = 1; b < size; b++) { if (array[a] > array[b]) { temp = array[a]; array[b] = array[a]; array[a] = temp; } } } for(z=0;z<size;z++) printf("%i",array[z] ); }
und wird folgendermaßen aufgerufen:
case 4: { printf("Welche der 3 Sortier Methoden möchten sie Benutzen?\n"); printf(" 1) Bubblesort\n"); printf(" 2) Shakersort\n"); printf(" 3) Insertionssort\n"); scanf("%d", &z); switch(z) { case 1: { printf("Bubblesort:\n"); bubble(array); }break;
ich hoffe ihr habt eine idee und könntet mir helfen
-
Ich helf dir etwas auf die Sprünge:
// im Kommentar ein Beispiel für die Zahlen 7 (array[a]) und 5 (array[b]) temp = array[a]; // temp = 7 array[b] = array[a]; // array[b] = 7 array[a] = temp; // array[a] = 7 // Die 5 verschwand hinter der Wand und wurde mit der 7 überschrieben :D
-
nein bitte nicht, das kann doch nicht ernsthaft der fehler sein-.-
vielen dank, werde mich gleich wieder dran setzen und sonst nochmal melden ^^
danke für diene hilfe!!
-
hab das jetzt geändert, aber wieso zum teufeln schiebt er denn nur die kleinste zahl nach ganz links und lässt den rest einfach so bestehen?
er müsste doch eigentlich immer weiter nach vorne wandern und die zaheln vertauschen??
-
#include <stdio.h> void bubblesort(int *array, int length) { int i, j; for (i = 0; i < length; ++i) { for (j = 0; j < length - i - 1; ++j) { if (array[j] > array[j + 1]) { int tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } int main() { int arr[] = {5,3,6,7,8,2,3}; bubblesort(arr, sizeof(arr)/sizeof(int)); for(int i=0; i < sizeof(arr)/sizeof(int); ++i){ printf("%i",arr[i]); } return 0; }
-
Danke, genau den Code habe ich auch gefunden,
hab ihn auf meine variablen umgeschrieben und naja...
er setzt halt nur die höchste zahl ein letzte stelle, mehr aber auch nicht, der rest verschiebt sich einfach auf links
das kann doch eigentlich garnicht sein?int r, z; int s; int size=0; int *array = NULL; void bubble(int array[z], int size) { int a, b,temp; for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { int temp = array[a]; array[a] = array[a + 1]; array[a + 1] = temp; } } } }
so hab ich die funktion geschrieben und dann ruf ich sie später folgendermaßen auf:
switch(z) { case 1: { printf("Bubblesort:\n"); bubble(array,size); }break;
-
Stichpunkt Arraygrenzen
for (a = 0; a < size; a++) { for (b = 0; b < size; b++) { if (array[a] > array[a + 1]) { |____| | | Was ergibt das wohl, wenn a im letzten Schleifendurchlauf ist