Probleme bei einlesen von arrays über Console
-
@wob Danke dir für deine ausführliche Hilfe. In meinen neuen Skripten steht etwas über Funktionen und bis jetzt bin ich noch nicht dahinter gestiegen. Ich habe nur gesehen, dass das etwas mit Rückgabewerten und Parametern zu tun hat wie z.B. void bezeichnung (int k) --> das wäre jetzt meines Wissens nach ein Parameter ohne Rückgabewert. Was das genau bedeutet, weiß ich leider noch nicht.
-
@Ravensouth sagte in Probleme bei einlesen von arrays über Console:
Was das genau bedeutet, weiß ich leider noch nicht.
Warum nicht? Du kennst doch sicher z.B. trigonometrishe Funktionen wie Sinus. Was machen die? Was sind Parameter, was geben sie zurück? Kannst du das abstrahieren?
-
Hallo @Ravensouth ,
Eine Funktion (siehe auch Methode) ist so etwas wie ein kleines Unterprogramm. Du vergibst einen sprechenden Namen, wie addiereGanzzahlen, und damit die Funktion weiß, welche Werte sie addieren soll übergibst Du der Funktion addiereGanzzahlen zwei Werte (wert1 und wert2) als Parameter.Sieht jetzt schon mal so aus:
addiereGanzzahlen( int wert1, int wert2);
Voila, jetzt brauchen wir nur noch das Ganzzahl-Ergebnis, das kennzeichnen wir, indem wir den Rückgabetyp davor schreiben…
int addiereGanzzahlen( int wert1, int wert2);
Jetzt noch die Ausführung definieren (ein bisschen komplexer zum Verständnis)…
int addiereGanzzahlen( int wert1, int wert2) { int retVal = wert1 + wert2; // hier wird addiert und die Summe einer Variablen zugewiesen return retVal; // hier wird der Wert zurückgeliefert };
Jetzt nutzen wir unsere kleine Funktion:
... int meinZuBerechnenderWert = addiereGanzzahlen( 123, 456 ); ...
meinZuBerechnenderWert sollte jetzt den Wert 579 haben.
Funktionen, die keinen Rückgabewert liefern sollen, werden mit dem Schlüsselwort void eingeleitet.void tuWasOhneWasZuLiefern( … );
Zum Anfang sollte das reichen, ansonsten gibt’s da noch ne Menge nachzulesen.
-
@Mechanics Sowas hatten wir im Abitur. Kommt sicherlich im Studium auch noch dran. Habe sowieso das Gefühl, als würde sich Mathe und Informatik bei uns jetzt ziemlich stark überschneiden wie sonst nie zuvor.
-
@Helmut-Jakoby Ach so. Jetzt verstehe ich wie man die Funktion in der Praxis anwendet. Ein sehr gutes Beispiel. Danke dir
-
@hustbaer
Man nutzt überhaupt niemals scanf.
Man nutzt fgets+sscanf.
Das funktioniert dann auch in stdin redirections via commandline-Pipe und auch für beliebig viele (vorher unbekannte Anzahl von - alledings gleichtypisierten) Inputs.
-
@Ravensouth sagte in Probleme bei einlesen von arrays über Console:
Ich habe nmax begrenzt,
Mache aus "int nmax=40" ein enum { NMAX=40 };
dann sind deine Arrays keine VLA, und dein Code nähert sich etwas einer professionellen Programmierung.Nutze in deinen for-Schleifen für i die initial declaration, also
for(int i=0;...;...)
-
@Wutz sagte in Probleme bei einlesen von arrays über Console:
@hustbaer
Man nutzt überhaupt niemals scanf.
Man nutzt fgets+sscanf.
Das funktioniert dann auch in stdin redirections via commandline-Pipe und auch für beliebig viele (vorher unbekannte Anzahl von - alledings gleichtypisierten) Inputs.Was soll denn da bitte der Zusammenhang sein?
-
@SeppJ
fgets kümmert sich um Newlines & Co, und sscanf kümmert sich um die eigentliche Aufgabe.
sscanf arbeitet auf dem char-Stream, und somit sauber getrennt vom Inputverfahren.
-
Was soll das mit Pipes zu tun haben?
edit: Beitrag auf das wesentliche beschränkt und Nebendiskussionen entfernt.