C Allgemeine "Anfänger" Frage

Registriert
Feb. 2015
Beiträge
3
Hallo,

ich habe folgendes Programm als Einstieg:

Code:
#include <stdio.h>

main(){
double summe = 0.0, zahl1, zahl2, zahl3;
int nachkomma;
printf("\n1. Zahl : ");
scanf ("%lf" , &zahl1);
summe=summe+zahl1;
printf("\n2. Zahl : ");
scanf ("%lf" , &zahl2);
summe=summe+zahl2;
printf("\n2. Nachkommastellen : ");
scanf ("%i" , &nachkomma);
printf("\n Zwischengebnis = %.nachkommaf",summe);
printf("\n\n3. Zahl : ");
scanf ("%lf" , &zahl3);
summe=summe+zahl3;
printf("\n Endergebnis = %.nachkommaf",summe);
}

Eigentlich möchte ich für das Zwischenergebnis und Endergebnis nur eingeben können, wie viele Nachkommastellen angezeigt werden sollen, aber iwie kommt dann bei mir gar nichts mehr.

Für einen Profi sicherlich binnen Sekunden zu Beantworten, trotzdem vielen Dank im Voraus!
 
summe += zahl1;

wenn du eine zahl mit nachkomma willst, dann mach mal 10^gewünschte nachkomma stellen, dann wandel es zu int, dann wieder zu double und teilen durch 10^gewünschte nachkomma stellen.
 
Das wiederum verstehe ich grade gar nicht. Wie meinst du das denn? Und was meinst du mit der ersten Zeile?

Danke aber schon mal für die schnelle Antwort!
 
summe += zahl1; ist die Abkürzung für : summe=summe+zahl1;

Du musst übrigens scanf ("%d" , &nachkomma); schreiben. %d für Dezimalzahlen.
 
Du kannst nicht
Code:
printf("\n Zwischengebnis = %.nachkommaf",summe);
du musst vorher einen neuen String erstellen, welcher die Nachkommzahl schon als Parameter hat.
Code:
char nachkommaBuf[10];
sprintf(nachkommaBuf,"%%.%df\n",nachkomma);
damit steht z.B. für nachkomma =5, dann "%.5f\n" im nachkommaBuf

Dann kannst du
Code:
printf("Zwischengebnis =");
printf(nachkommaBuf,summe);
das Zwischenergebnis mit den 5 Nachkommastellen ausgeben.
 
Und die Antwort von Sondai solltest du noch etwas ausbessern, bevor du sie übernimmst; die leidet nämlich unter einem buffer overflow. Entweder den buffer groß genug wähen, oder die Anzahl an Nachkommastellen beschränken.
 
Jop, einfach Beschränkung, dass nachkomma maximal 10 seien kann oder so wäre sinnvoll und negative Zahlen ausschließen wäre auch eine gute Idee. Außer man braucht echt die ~2^31 Nachkommastellen XD
 
Ein print sollte mit \n abschließen, sonst wird der Text gepuffert statt ausgegeben. Mach das immer ganz hinten drann statt vorne. Alternativ fflush(stdout) nach printf
 
Zuletzt bearbeitet:
Black90, das stimmt so nicht. Mag sein, dass das in C++ anders ist, aber in C wird ein printf auf jeden Fall auch so ausgegeben.

Edit: Kann natürlich auch von den Buffereinstellungen für stdout abhängen. Wenn dort nichts gesetzt wurde wird aber auch ein printf ohne \n sofort ausgegeben.
 
Zuletzt bearbeitet:
Ja, aber nur im Terminal. Es macht einen Unterschied wie (worüber) das Programm gestartet wird.
stdout ist standardmäßig gebuffert. Darum würde ich mich nicht darauf verlassen und entweder \n hinten anhängen oder flushen.

Z.b. wenn man ein Prozess startet der wieder einen anderen startet. Letzterer wird alles buffern und nix ausgeben. Direkt gestartet funktioniert es normal.
 
Ah ok. Wieder was gelernt, dankeschön. Alternativ könnte man stdout ja auch explizit auf ungebuffert setzen.
 
Geht auch. Kannst ja mal eine FIFO (pipe) testweise programmieren, da siehst dann auch nix mehr.
Man kann dann Strings per print zusammenbauen und zum Schluss ausgeben.
 
Hallo Leute,

vielen Dank für die hilfreichen Antworten. Werde ich entsprechend einpflegen.

Kein Plan was bei der letzten Konversation gemeint ist.. Buffer? stdout, FIFO? Aber ich glaube zur Lösung eines Problemes muss ich das wohl auch nicht wissen...
 
Kein Plan was bei der letzten Konversation gemeint ist.. Buffer? stdout, FIFO? Aber ich glaube zur Lösung eines Problemes muss ich das wohl auch nicht wissen...

Das sind grundlegende Programmierbegriffe die man i.d.R. noch vor dem ersten Tippen lernt.
Wenn du wieder Hilfe brauchst solltest du zumindest die Basics vorher selbst googeln.
Soviel Eigeninitiative sollte dem Hausverstand entspringen.

mfg,
Max
 
max_1234 schrieb:
Das sind grundlegende Programmierbegriffe die man i.d.R. noch vor dem ersten Tippen lernt.
Vielleicht wenn man mit Linux groß geworden ist oder in deinem Informatikstudium. Gerade viele Anfängertutorials und -Bücher halten sich mit sowas aber erstmal nicht auf.

max_1234 schrieb:
Wenn du wieder Hilfe brauchst solltest du zumindest die Basics vorher selbst googeln.
Soweit gebe ich dir recht
 
Zurück
Oben