Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von deerhunter
Thema: Problem mit while schleife und switch-Anweisung
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

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;
				}
			}
		}
	}
}