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

  • »
  • Community
  • |
  • Diskussionsforum
Jahr Angabe - Hilfe für einen Beginner
specialist
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Jahr Angabe - Hilfe für einen Beginner

beantworten | zitieren | melden

Hallo,
ich bin noch sehr unerfahren ein Beginner und bitte um Hilfe.
Ich habe eine Abfrage erstellt wo das Jahr und auch der aktuelle Monat in zahlen abgefragt werden.

Als Ausgabe bekomme ich nach den zwei Abfragen als Beispiel den folgenden Text " Wir haben April 2020.

1. Nun möchte ich aber dass das Jahr auch als 2020 ausgegeben wird auch wenn der User nur 20 eintippt.
2. Als zweites habe ich die folgende Ausgabe erstellt wenn der User nach der Monatsabfrage 13 eintippt "Den Monat gibt es gar nicht, bitte gib den Monat in Zahl richtig ein: "

Nur weiß ich den Schleifen Befehl nicht oder genauer gesagt weiß ich nicht wie ich den Befehl richtig ansetzen kann so das das Programm danach wieder von Anfang an beginnt.

Ich hoffe Ihr könnt mir helfen. Ich habe lange nach einer Lösung gesucht aber ich bin noch sehr neu und brauche hier Eure Hilfe. Das ist hier kein Test oder eine Hausaufgabe für die Schule. Ich will nur Erfahrung sammeln und brauche deshalb Eure Hilfe. Über ein paar Vorschläge wäre ich sehr dankbar.
Vielen Dank und viele Grüße.

Hier ist der Code:


namespace Switch_Monat
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Bitte gib diesen Monat in Zahl ein:  ");
            string eingabe = Console.ReadLine();
            Console.Write("Bitte gib das Jahr ein:    ");
            string eingabe2 = Console.ReadLine();

            int monat = Convert.ToInt32(eingabe);
            int jahr = Convert.ToInt32(eingabe2); 
            
            
            Console.WriteLine();
            switch (monat)
            {
                case 1:
                    Console.Write("Wir haben Januar "); Console.WriteLine(jahr);
                break;

                case 2:
                    Console.Write("Wir haben Februar "); Console.WriteLine(jahr);
                break;

                case 3:
                    Console.Write("Wir haben März "); Console.WriteLine(jahr);
                break;

                case 4:
                    Console.Write("Wir haben April "); Console.WriteLine(jahr);
                break;

                case 5:
                    Console.Write("Wir haben Mai "); Console.WriteLine(jahr);
                break;

                case 6:
                    Console.Write("Wir haben Juni "); Console.WriteLine(jahr);
                break;

                case 7:
                    Console.Write("Wir haben Juli "); Console.WriteLine(jahr);
                break;

                case 8:
                    Console.Write("Wir haben August "); Console.WriteLine(jahr);
                break;

                case 9:
                    Console.Write("Wir haben September "); Console.WriteLine(jahr);
                break;

                case 10:
                    Console.Write("Wir haben Oktober "); Console.WriteLine(jahr);
                break;

                case 11:
                    Console.Write("Wir haben November "); Console.WriteLine(jahr);
                break;

                case 12:
                    Console.Write("Wir haben Dezember "); Console.WriteLine(jahr);
                break;

                default:
                    Console.Write("Den Monat gibt es gar nicht, bitte gib den Monat in Zahl richtig ein: ");
                break;
                    
            }
            Console.ReadKey();
        } 
    }
}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von specialist am .

Moderationshinweis von gfoidl (02.04.2021 - 08:57:22):

Bitte die entsprechenden Code-Tags verwenden.
Siehe Wie poste ich richtig? Punkt 6.

private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7528
Herkunft: Waidring

beantworten | zitieren | melden

Hallo specialist,

schau mal:


using System;

#nullable enable

while (true)
{
    Console.Write("Bitte gib diesen Monat in Zahl ein: ");
    string? monthInput = Console.ReadLine();

    if (!int.TryParse(monthInput, out int month) || (month < 1 || month > 12))
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine("Ungültiger Wert für einen Monat eingegeben. Erlaubt sind Zahlen 1 bis 12.");
        Console.ResetColor();
        continue;   // Schleife wieder von vorne beginnen
    }

    Console.Write("Bitte gib das Jahr ein: ");
    string? yearInput = Console.ReadLine();

    if (!int.TryParse(yearInput, out int year))
    {
        Console.ForegroundColor = ConsoleColor.Yellow;
        Console.WriteLine(@"Ungültiger Wert für ein Jahr eingegeben. Erlaubt sind Zahlenwerte, wobei eine zwei Ziffern Eingabe
wie folgt behandelt wird:
jj <  50 -> 20jj
jj ≥ 50 -> 19jj");
        Console.ResetColor();
        continue;   // Schleife wieder von vorne beginnen
    }

    year += year switch
    {
        < 50 => 2000,
        ≥ 50 and < 100 => 1900,
        _ => 0
    };

    DateTime dateTime = new DateTime(year, month, 1);

    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine($"Wir haben {dateTime:MMMM yyyy}");
    Console.ResetColor();
}
Davon ausgehend kannst du es beliebit erweitern bzw. das dir Unbekannte nachlesen (in der Doku). Wenn du dann irgendwo hängst, so frag einfach nach.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1796
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Für das jahr Problem kannst du ja einfach prüfen ob das Jahr kleiner als 1000 ist.
Wenn ja, dann kannst du einfach + 2000 drauf rechnen und hast das entsprechende Jahr.
Z.b. bei 20 würde er dann automatisch 2020 berechnen.

Dein Schleifen Problem würde ich mit der do while Schleife lösen.
Da du das Jahr erst nach dem ersten Durchlauf prüfen kannst.

Dies würde dann grob so aussehen.


int monat = 0;
int jahr = 0;

do
{
    Console.Write("Bitte gib diesen Monat in Zahl ein:  ");
    string eingabe = Console.ReadLine();
    Console.Write("Bitte gib das Jahr ein:    ");
    string eingabe2 = Console.ReadLine();

    monat = Convert.ToInt32(eingabe);
    jahr = Convert.ToInt32(eingabe2);
    ...
} while(monat < 1 || monat > 12)


T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7528
Herkunft: Waidring

beantworten | zitieren | melden

Hallo T-Virus,
Zitat
Für das jahr Problem kannst du ja einfach prüfen ob das Jahr kleiner als 1000 ist.
Wenn ja, dann kannst du einfach + 2000 drauf rechnen und hast das entsprechende Jahr.
Kommt darauf an welches Regelwark gelten soll. Ist 50 2050 od. 1950? Je nachdem sollte ein präzisere Unterscheidung (siehe oben) durchgeführt werden.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 436
Herkunft: Untermeitingen

beantworten | zitieren | melden

Man kann sich auch im Jahr 2021 den Y2K-Bug wieder einbauen... Muss man nicht verstehen - geht aber :-)
Warum nicht aus Fehlern lernen? Mit nur 2 Zahlen ist es nun mal nicht möglich die genau Jahreszahl zu erraten/bekommen...
private Nachricht | Beiträge des Benutzers
specialist
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

Dies war mein erster Post, schon wurde mir geantwortet und das am Feiertag.
Vielen vielen Dank und schöne Feiertage.

Viele Grüße

specialist ( irgendwann hoffentlich )
private Nachricht | Beiträge des Benutzers
Torni
myCSharp.de - Member



Dabei seit:
Beiträge: 43

beantworten | zitieren | melden

und als Zusatz kannste die case/switch bissl entschlanken:

System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(Monatszahl)
private Nachricht | Beiträge des Benutzers
Wilfried
myCSharp.de - Member

Avatar #2TnJ7IKlYXgOor5sZSIA.jpg


Dabei seit:
Beiträge: 87
Herkunft: Radeberg

beantworten | zitieren | melden

Was spricht gegen diese Variante?:


            string date = "21";
            DateTimeOffset dateTime;
            var r = DateTimeOffset.TryParseExact(date,new string[] { "yy", "yyyy" }, new CultureInfo("de-DE"), DateTimeStyles.AllowWhiteSpaces,out dateTime);

-Wer lesen kann, ist klar im Vorteil
-Meistens sitzt der Fehler vorm Monitor
-"Geht nicht" ist keine Fehlermeldung !

GidF
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7528
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Wilfried,

ist eine schöne Lösung!
Nur wenn in die Zukunft (z.B. 2030) gegangen werden soll, so klappt das nicht, da 1930 herauskommen würde.

Daher sollte der Hinweis von Stefan.Haegele unbedingt berücksichtigt werden.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Wilfried
myCSharp.de - Member

Avatar #2TnJ7IKlYXgOor5sZSIA.jpg


Dabei seit:
Beiträge: 87
Herkunft: Radeberg

beantworten | zitieren | melden

Welches Jahrhundert richtig ist, kann nur der Entwickler oder sogar nur der Nutzer entscheiden. Wenn es das Geburtsjahr ist oder der Zeitraum fest steht, dann kann es der Entwickler entscheiden. Ansonsten kann man dem Nutzer eine Auswahl anbieten oder er muss 4 Stellen eingeben.
Und mit DateTimeOffset kann man ja gut rechnen.
-Wer lesen kann, ist klar im Vorteil
-Meistens sitzt der Fehler vorm Monitor
-"Geht nicht" ist keine Fehlermeldung !

GidF
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #avatar-3299.jpg


Dabei seit:
Beiträge: 3727
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Das erinnert mich an eine Frage an eine Software Firma nach einem Vortrag im Jahr 1990 :

"Wir schreiben Software für Krankenhäuser und da haben wir ab und zu Patienten mit Geburtstag vor dem 1.1.1900. Das kann man nicht eingeben !"

Antwort : "Das Problem löst sich mit der Zeit von alleine !"

Grüße Bernd
Die kostenlose Unternehmenssoftware : [url=https://seven-c.de/die-quasar-3-community-version/]Die Quasar-3 Community Version[/url] Workshop : [url=https://download.seven-c.de/files/datenbankenhowto.htm]Datenbanken mit ADO.NET[/url]
private Nachricht | Beiträge des Benutzers