C# Zahlen eingeben - kann jemand helfen?
die Aufgabenstellung:
Nach dem Programmstart soll dazu zunächst eine Aufforderung ausgegeben werden, zeilenweise Zahlen einzugeben. Diese Eingabe soll so lange wiederholt werden, bis die Zahl 0 eingegeben wird. Daraufhin ist die Summe aller bis dahin eingegebener Zahlen auszugeben und das Programm zu beenden.
Wir haben es mit einer while schleife gelöst, aber wir haben ein Problem. Und zwar können wir nur einmal eine Zahl eingeben. und diese wird dann immer aufaddiert. (also das vielfache von dieser Zahl wird berechnet).
Wir sind noch Anfänger und bräuchten dringend hilfe.
namespace Intro { class Program { static void Main() {
System.Console.WriteLine(" Gebe eine Fließkommazahl ein"); string s = System.Console.ReadLine(); double zahl1 = double.Parse(s); double ergebnis = 0; do {
System.Console.WriteLine(ergebnis); ergebnis = ergebnis + zahl1; } while (zahl1 != 0); } } }
2 Antworten
Wie geri3d schon sagte, du liest nur einmal eine Zahl ein und endest damit in einer Endlosschleife (außer man gibt 0 ein). Die Eingabe gehört somit in die Schleife, da sich der Wert von zahl1 nicht verändert.
Hier wäre meine Lösung
var result = 0d; double z; do { z = double.TryParse(Console.ReadLine(), out z) ? z : 0; result += z; Console.WriteLine(result); } while (Math.Abs(z) > 0.000000001d);
Du musst außerdem den Datentypen (string, double etc) nicht explizit angeben, wenn der Typ schon Feststeht. z.B. double ergebnis = 0; wird zu var ergebnis = 0. Um noch sicher zu gehen, dass ergebnis double ist schreibe 0d.
Verwende statt double.Parse double.TryParse, da du nicht extra die Exception bei falscher Eingabe abfangen musst.
Lass dich nicht vom Math.Abs verwirren, bei Fließkommazahlen prüft man normalerweise nicht auf einen genauen Wert ab.
double ergebnis = 0;
und das Do { gehört vor dem
string s = System.Console.ReadLine();
dann müsste es klappen.
Ich habs mal für dich ausprobiert, ist zwar auch nicht ganz ok aber es sollte dir auf die Sprünge helfen:
System.Console.WriteLine(" Gebe eine Fließkommazahl ein");
double ergebnis = 0;
double zahl1;
do {
string s = System.Console.ReadLine();
if (double.TryParse(s, out zahl1))
{
ergebnis = ergebnis + zahl1;
System.Console.WriteLine(ergebnis);
}
} while (zahl1 != 0);
klappt irgendwie trz nicht :( stimmt der Rest denn?