Hallo,
ich bin neu hier im Forum und würde mich freuen, wenn ihr eine Lösung zu meinem Problem anbieten könntet.
Ich habe ein kleines "Menü" für meine Konsolenanwendung geschrieben und rufe mit der Eingabe von Zahlen mit Hilfe der switch-Anweisung den gewünschten Code auf.
Alles funktioniert prima, d.h. wenn ich 1, 3 oder 4 aufrufe, führt er den Code aus und ich gelange anschließend wieder zur Menüauswahl.
Wenn ich jedoch die 2 aufrufe, führt er den Code von "Case 2" aus und beendet das Programm ohne zum Auswahlmenü zurückzukehren.
Beim Step-by-Step debuggen habe ich festgestellt, dass er einfach die Console.ReadLine() Anweisung aus Zeile 19 überspringt, d.h. ich kann im Konsolenfenster nichts eingeben.
Das ganze verwundert mich sehr, da ich das "Menü" schon mehrfach verwendet habe und es bisher nie Probleme gab.
Hat jemand von euch vielleicht eine Idee, wo der Fehler liegen könnte?
Vielen Dank im Voraus.
Florian
P.S.: Ich habe im Code öfters ein "\n" bei der Stringausgabe verwendet. In dem Forum-Code wird dieses aber nicht dargestellt - zumindest in der Vorschau...
Sollte aber kein Problem sein, da es mir nur um die switch-case-Anweisung im Fall "case 2" geht.
[edit]
Ich benutze Visual STudio 2005 und .NET 2.0 unter Windows XP
[/edit]
using System;
using System.Collections;
using System.Text.RegularExpressions;
namespace Stringformatierung
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
int Auswahl = 1;
string Standardtext = "Ein einäugiger Bandit reinigt einige dreckige Kleidungsstückstreifen mit ein wenig Seifenlauge, die er eigens für eine solche Aktion vorbereitet hat.";
string temp=null;
while (Auswahl!=0)
{
Console.WriteLine("\n\n(0) beenden\n(1) Umwandlung einzelner Buchstaben eines Strings ('e'-->'D') und ('t'-->'U')\n(2) Anzahl der Zeichen im String zählen\n(3) EMail-Adresse überprüfen\n(4) Dateinamen aus vollständiger Pfadangabe extrahieren");
Console.Write("Auswahl: ");
temp = Console.ReadLine(); // <-- diese Zeile wird einfach übersprungen
switch (Auswahl = temp != "" ? Convert.ToInt32(temp) : 0) //Kurzform für if (temp !="") Auswahl = Convert.ToInt32(temp) else 0
{
case 1:
Console.Write("\nEingabe des Strings [leer lassen für Standardtext]: ");
string Text = Console.ReadLine();
if (Text == "")
Text = Standardtext;
string Text_1 = Text.Replace('e','D').Replace('t','U');
Console.WriteLine("\nalter Text:\n{0}", Text);
Console.WriteLine("\nveränderter Text:\n lautet{0}",Text_1);
break;
case 2:
Console.WriteLine("Eingabe des Strings [leer lassen für Beispieltext]: ");
string Eingabe_2 = Console.ReadLine();
if (Eingabe_2 == "")
Eingabe_2 = Standardtext;
Console.Write("\nEingabe eines Such-Buchstabens: ");
char Such_Buchstabe = Convert.ToChar(Console.Read());
char[] array = Eingabe_2.ToCharArray();
int Anzahl = 0;
foreach (char i in array)
if (i == Such_Buchstabe)
Anzahl++;
Console.WriteLine("\n{0}\n", Eingabe_2);
Console.WriteLine("Der Buchstabe \"{0}\" kommt {1}x vor. ", Such_Buchstabe, Anzahl);
break;
case 3:
Console.Write("Bitte eine EMail-Adresse eingeben: ");
string email = Console.ReadLine();
if (Regex.IsMatch(email, @"^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$"))
Console.WriteLine("Adresse ist gültig.");
else
Console.WriteLine("Adresse ist ungültig.");
break;
case 4:
Console.Write("Bitte einen Pfad angeben [frei lassen für Beispielpfad]: ");
string Pfad = Console.ReadLine();
if (Pfad == "")
Pfad = @"C:\test\meinetextdatei.doc";
string pattern = @".*\\(?<Dateiname>\w+)\.(?<Endung>\w+)";
string replacement = @"${Dateiname}";
string dateiname = Regex.Replace(Pfad, pattern, replacement);
Console.WriteLine("kompletter Pfad: {0}\nDateiname: {1}",Pfad, dateiname);
break;
default:
break;
}
}
}
}
}
Hallo deerhunter,
das Problem ist, dass du in case 2 Console.Read benutzt. Und damit nur einzelne Zeichen aus der Eingabe liest. Die verbleibenden Zeichen (z.B. der Zeilenvorschub) werden dann von ReadLine gelesen weshalb die Zeile "übersprungen" wird. Benutze überall ReadLine. Dann geht es.
herbivore
Original von herbivore
Hallo deerhunter,das Problem ist, dass du in case 2 Console.Read benutzt.
herbivore
Hallo herbivore,
Vielen Dank für deine Hilfe, jetzt funktioniert es! Da wäre ich im Leben nicht drauf gekommen...
Gruß, Florian
Hallo deerhunter,
herbivore hat recht.
versuch es so:
....
Console.Write("\\nEingabe eines Such-Buchstabens: ");
string such_BuchstabeEingabe = Console.ReadLine();
if (such_BuchstabeEingabe.Length == 0)
break;
char Such_Buchstabe = such_BuchstabeEingabe[0];
char[] array = Eingabe_2.ToCharArray();
...