Woher weiß das C-Programm das für den eingegebenen Wert mit printf der Radius einer bestimmten Variablen zugeordnet wird?

6 Antworten

In Zeile 6 wird die Variable r (sowie die Variablen A und U) vom Typen float definiert.

In Zeile 9 wird dann auf Nutzereingabe in Form eines floats ("%f") gewartet mittels scanf(). Diese Eingabe wird der Variable r dann zugewiesen (siehe am Ende der Zeile "&r" womit wiederum auf die Variable r gezeigt wird).

In den nachfolgenden beiden Zeilen finden die Berechnungen statt, in Zeile 12 werden die beiden Ergebnisse (A und U) dann ausgegeben. Hier wird wieder angezeigt, dass es sich um Variablen vom Typ float handelt ("%f"), welche dann nacheinander als zweiter und dritter Parameter der printf() Funktion für die Ausgabe übergeben werden.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung
Kommt die Verbindung zwischen diesen beiden Funktionen daher dass sie direkt untereinander stehen?

Nein, das hat damit natürlich nichts zu tun.

das "scanf" in deinem Beispiel weist die Eingabe der Variablen r zu.

würde eine weitere "scanf" Funktion wieder der Variablen r zugewiesen werden, würde r überschreiben werden.

Im Normalfall verwendet man aber für eine andere "scanf"-Funktion eine andere Variable.

123abc456d7 
Fragesteller
 15.10.2019, 18:57

|das "scanf" in deinem Beispiel weist die Eingabe der Variablen r zu.

Aber wie wird die Eingabe dem scanf zugewiesen?

0

Das scanf liest einfach das ein was eingegeben wird. Es kümmert sich gar nicht darum was vorher oder nachher mit printf ausgegeben wurde. Aus Sicht des scanf ginge es auch ganz ohne printf.

Generell ist es ein bisschen gefährlich, direkt einen Float mit scanf einzulesen. Das Verhalten was genau passiert wenn die Eingabe eben kein Float ist, kann nämlich sehr unintuitiv sein.

Besser ist, einen String einzulesen und den dann mit einer eigenen Funktion in ein Float umzuwandeln.

https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/rtref/itof.htm

Das printf hat mit dem scanf nicht unmittelbar was zu tun, der printf-Befehl dient ja nur dazu, dem Nutzer mitzuteilen, dass er jetzt etwas eingeben soll. Du könntest ihn prinzipiell auch weglassen, trotzdem würde scanf etwas einlesen.

Das %f im Scanf - Befehl bedeutet, dass ein float (Kommazahl) eingelesen werden soll, und die wird in der Variable r gespeichert. Das Programm wartet bei diesem Befehl gewissermaßen auf eine passende Tastatureingabe und speichert diese automatisch. Ob davor was auf der Konsole mit print ausgegeben wurde oder nicht, ist dafür schnurz. Ohne printf kann der Nutzer aber ja nicht wissen, dass das Programm von ihm eine Eingabe erwartet.

Also: Scanf wird aufgerufen, Programm speichert die erste "passende" Eingabe unter dem Variablennamen r ab. Was davor auf der Konsole passiert ist, interessiert scanf nicht. Erst nachdem dieser Befehl aufgerufen wurde, wird die Eingabe erwartet.

scanf(ormated) und printf(ormated) haben erstmal nicht miteinander zu tun. außer, daß das eine eben eine formatierte Ausgabe erzeugt und das andere aus einer Eingabe eines Formates Teile extrahiert (also herauszieht).

scanf("%f",&r);

Extrahiere aus der Eingabe "%f", also eine Zeichnefolge, die einen Float-Wert beschreibt. Dieser Floatwert ist an Positionsargument 1 abzulegen. Positionsargument 1 ist &r, die Adresse der Variablen r, also der Ort im Speicher, an dem der Wert von r steht.

Falls Dir das nicht bewußt sein sollte, Funktionen der Standardbibliothek sind dokumentiert.

Woher ich das weiß:eigene Erfahrung