Wieso bekommt die Variabel einen anderen Wert?
Wenn ich den C# Code ausführe wird der Wert der Variabel tief auf eingabe+48 gesetzt.
Wie kann ich das verhindern?
private static void tri()
{
Console.Write("Bitte geben sie die breite an: ");
int tief = Console.Read();
Console.WriteLine(tief);
int tiefe = tief + 2;
Console.WriteLine(tiefe +" "+ tief);
StringBuilder dreieck = new StringBuilder(string.Empty);
char[] form = new char[tiefe];
for (int i = 0; i < tiefe; i++)
{
form[i] = ' ';
}
for (int it = 0; it <= tiefe/2-1; it++)
{
try
{
form[(tiefe / 2 + 1) - it] = '#';
form[(tiefe / 2 + 1) + it] = '#';
}
catch
{
//abbrechen
}
dreieck.AppendFormat(new String(form)+ "\n");
}
Console.WriteLine(dreieck);
}
4 Antworten
Du wandelst hier einen Char implizit in einen int um und erhältst daher den Fehler.
Der Char 5 entspricht der Zahl 53 im Ascii Code.
int tief = Integer.parseInt(Console.Read());
damit sollts gehn.
Ja aber das ist der Ascii Code des Zeichens und nicht die Zahl die du eigegeben hast.
Mach ein:
int tief = int.Parse(Console.ReadLine());
draus.
Du solltest die Eingabe überprüfen und wenn es möglich in einen Integer umwandeln:
static void Main(string[] args)
{
int tief = IntegerEingabe("Bitte geben sie die breite an: ");
Console.WriteLine(tief);
int tiefe = tief + 2;
Console.WriteLine(tiefe + " " + tief);
StringBuilder dreieck = new StringBuilder(string.Empty);
char[] form = new char[tiefe];
for (int i = 0; i < tiefe; i++)
{
form[i] = ' ';
}
for (int it = 0; it <= tiefe / 2 - 1; it++)
{
try
{
form[(tiefe / 2 + 1) - it] = '#';
form[(tiefe / 2 + 1) + it] = '#';
}
catch
{
//abbrechen
}
dreieck.AppendFormat(new String(form) + "\n");
}
Console.WriteLine(dreieck);
}
private static int IntegerEingabe(string Text)
{
int Zahl = 0;
while (true)
{
Console.Write(Text);
if (int.TryParse(Console.ReadLine(), out Zahl))
return Zahl;
}
}
Besser ? Oder wo liegt das Problem?
Console.Write("Bitte geben sie die breite an: ");
int tief = Console.Read();
int tiefe = tief + 2;
StringBuilder dreieck = new StringBuilder(string.Empty);
char[] form = new char[tiefe];
for (int i = 0; i < tiefe; i++)
{
form[i] = ' ';
}
for (int it = 0; it <= tiefe/2-1; it++)
{
try
{
form[(tiefe / 2 + 1) - it] = '#';
form[(tiefe / 2 + 1) + it] = '#';
}
catch
{
//abbrechen
}
dreieck.AppendFormat(new String(form)+ "\n");
}
Console.WriteLine(dreieck);
du hast nichts geändert am code?!
der fehler waren nicht die ausgaben, sondern der wert der Variabel.
Frage: zu welchem Package gehört deine Klasse Console?
In https://docs.oracle.com/javase/7/docs/api/java/io/Console.html
sind die Methoden Read(), Write und WriteLine() nicht definiert.
das ist in c# geschrieben.
und die rückgabe von console.read() ist ein int32.