Problem mit der Ausgabe
-
Hallo,
ich lerne seit einigen Monaten C und komme eigentlich recht gut vorran nur.
Jetzt habe ich eine Aufgabe in der ich einen Array 2 dimensional ausgeben soll.in einer früheren Aufgabe habe ich das so gelöst:
for(i=0;i<10;i++) // Zwei for-SChleifen, eine für den 1er Bereich, die zweite für den 10er Bereich { for(j=0;j<10;j++) { printf("%d",array[i][j]); } printf("\n");
Das Probelm ist, dass ich eigentlich erwartet habe, dass alle Zahlen des Arrays ia in einem 10 x 10 großem Feld ausgegeben werden, aber es geht kein bisschen.
Habe den Code mit meiner letzen Aufgabe verglichen und das identisch. Ich ahbe dort aber keine Switch-Anweisung verwendet, könnte der Fehler eventuell an der Verschachtelung liegen ???
Es wäre wirklich sehr nett, wenn sich jemand kurz den Code anschauen könnte, weil ich würde das schon gerne über switch lösen.
Mit freundlichen Grüßen
theflasher
Das hat auch gut funktioniert. Mein richtiges Problem kommt jetzt hier vor:#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> int main() { int ia[10][10] = {0}; char auswahl; printf("\t Anwendermenu :\n \n\t 1. Array mit Zufallszahlen fuellen\n\t 2. 2-Dimensional ausgeben \n\t 3. In Datei abspeichern \n\t 4. unbekannt(Danger)\n\n"); printf("\t Bitte machen Sie ihre Eingabe....\n"); srand(time(NULL)); while(auswahl != 'x') { scanf("%c",&auswahl); // Eingabe der Wunschfunktion fflush(stdin); switch(auswahl) // füllen des Arrays mit Zufallszahlen { case '1': int i,j; for(i=0;i<10;i++) { for(j=0;j<10;j++) { ia[i][j] = rand()%10; } } break; case '2': // Ausgabe des Array in 2 dimensionaler Form !!!!!!!!! Hier ist der Fehler int k,l; for(k=0;k<10;k++) { for(l=0;l<10;l++); { printf("%d" ,ia[k][l]); } printf("\n"); } break; default: printf("\t Bitte eine gültige Zahl eingeben??\n "); } }; return 0; }
-
Sieht doch gut aus, abgesehen, dass die Initialisierung mit = {0} falsch ist.
Was erwartest du denn deiner Meinung nach bei der Ausgabe?
-
Hi,
also ich erwarte, das die Ausgabe folgendermassen aussieht :
z.B
10,5,6,3,5,8,5,8,9,0
3,5,6,7,8,...
2,
3,
4,
7,
9,
5,
4,
1,...also praktisch 10 auf 10, was bei mir aber rauskommt ist folgender quatsch
z.B
3
4
5
8
2
3
4
5
28also praktisch 10 zahlen hintereinander, wobei die 28 immer dazu kommt und ich sie mir nbicht erklaren kann, keine ahnung. Ich brauche halt eine 10x 10 Reihe
könntest du vll auch noch bemerken wie das {0} auch flasch ist, wollte damit alle Elemente gleich am Anfang nullsetzen
Gruss theflasher
-
Hallo!
Schau mal bitte, was denn das ; nach der for-Schleife macht?
Reingefallen!
-
arghhhh !
du kannst gerne vorbeikommen und mir eine reinhauen
Aber seltsam, mir ist der Fehler noch nie passiert^^ Jetzt wird auch alles klar, durch das ; wird ja der Anweisungsblock nicht ausgeführt.
Ich schiebe alles auf den Compiler, der hätte mich warnen müssen ^^
Aber weißt du vll noch, wieso das initialisieren des Arrays mit {0} ein Fehler sein soll ?
Gruss theflasher
-
theflasher schrieb:
Aber weißt du vll noch, wieso das initialisieren des Arrays mit {0} ein Fehler sein soll ?
das ist kein fehler. wenn du alles auf 0 setzen willst, dann geht das so.
-
Anscheinend hatte ich hier eine Fehlinformation, muss das nochmal nachlesen.
-
Na, also da wollte mir doch tatsächlicher einer was einreden
Ok Problem gelöst, vielen Dank^^ Frohe Weihnachten :xmas1:
-
Hallo theflasher
habe mal schnell nachgelesen, demzufolge wird nur das erste Element initialisiert, sprich array[0][0]. Der Rest sind Zufallswerte. Vielleicht kann das jemand verifizieren
D A N K E
-
Hi, also hier habe ich nochmal einen Code, wo man das genau sieht
#include <stdio.h> #include <stdlib.h> void ubergabe(int array[10][10]); int main() { int array[10][10] = {0}; int i; int j; ubergabe(array); for(i=0;i<10;i++) // Zwei for-SChleifen, eine für den 1er Bereich, die zweite für den 10er Bereich { for(j=0;j<10;j++) { printf("%d",array[i][j]); } printf("\n"); } getchar(); return 0; } void ubergabe(int array[10][10]) { array[2][3] = 43; // Die 3te Zeile ist 2 und das 4te Element ist 3, weil 0 beachtet wird. array[0][0] = 12; }
Sieht so aus, als würden alle Zahlen mit 0 initialsiert werden
Gruss theflasher
-
Ich glaube, dass ist compilerabhängig aber nicht ANSI C
-
Du scheinst recht zu haben, habe in einem Buch gelesen, die Elemente, die nicht explizit einen Wert zugewiesen bekommen sollen, werden 0.
Sprich das Element [0][0] wird auf jeden Fall 0, die anderen implizit.
Mal was anderes:
An welche Programmierrichtlinien hälst du dich?Sieht sehr sauber aus!
Zeh Mau
-
Zeh Mau schrieb:
habe mal schnell nachgelesen, demzufolge wird nur das erste Element initialisiert, sprich array[0][0]. Der Rest sind Zufallswerte. Vielleicht kann das jemand verifizieren
nö, aber falsifizieren
ISO/IEC 9899:1999 - §6.7.8 absatz 21 schrieb:
If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate ...the remainder of the aggregate shall be
initialized implicitly the same as objects that have static storage duration....und statische objekte werden mit 0 initialisiert.
-
Also wenn "shall be" heißt, es muss zwingend so gemacht werden, dann sind die Werte tatsächlich 0, genau, wie bei static :xmas1:
Danke, das war ein toller Lerneffekt und wissenschaftlich recherchiert!
-
Zeh Mau schrieb:
Also wenn "shall be" heißt, es muss zwingend so gemacht werden..
naja, 'shall' ist eigentlich kein 'must', aber schon ziemlich fordernd. ich nehme an, sie verwenden 'shall', damit der text freundlicher klingt.