Semikolon nach While?



  • Hi!

    Wollte als Übung einen kleinen 1x1 Rechner schreiben. Allerdings tritt ein mysteriöser Fehler auf. Und zwar sagt mir der Compiler, ich solle nach der while-Bedingung ein Semikolon machen. Zeile 25: While(Nochmal == true) <-- da ein Semikolon? Das wäre doch syntaktisch falsch! Ich benutze den Sharp Develop Compiler. Weiss jemand was ich falsch gemacht habe?

    using System;
    using System.Collections.Generic;
    
    namespace Rechner
    {
    	class MainClass
    	{
    		public static void Main(string[] args)
    		{
    			int Reihe;
    			char Antwort;
    			bool Nochmal = true;
    
    			Console.WriteLine("Willkommen zu Term!nX' 1x1 Rechner!");
    			Console.WriteLine();
    
    			While(Nochmal == true)  
    			{	
    				Console.WriteLine("Welche Reihe des 1x1 wollen Sie sehen?");
    				Console.WriteLine();
    				Reihe = Console.ReadLine();
    				Console.WriteLine();
    				Console.WriteLine("Die " + Reihe + "er ist:");
    				Console.WriteLine();
    				for (int i = 0; i < 11; i++)
    				{
    					ConsoleWriteLine(Reihe * i);
    					Console.WriteLine();
    				}
    				Console.WriteLine("Möchten Sie noch eine Reihe sehen? J/N");
    				Console.WriteLine();
    				Antwort = Console.ReadLine();
    				if (Antwort == J) 
    				{
    					Nochmal = true;
    				}
    				else
    				{
    					Nochmal = false;
    				}
    
    			}
    
    		}
    	}
    }
    


  • Hmm, darf man while() denn groß schreiben?



  • Oh, nein darf man nicht. Ist mir nicht aufgefallen, weils trotzdem farbig markiert wurde. Nun wird mir aber bei der Zahleneinlesung gesagt:
    Der Typ string könne nicht implizit in int umgewandelt werden. Das Console wird dabei dann rot unterschlängelt. Außerdem kommt nach der If-Abfrage: Der Name j sei nicht im kontext vorhanden. Sorry, aber da habe ich keine Erklärung für. Gibt es für das Einlesen von Zahlenwerten einen anderen Befehl als Console.ReadLine(); ?



  • ReadLine() liefert einen String zurück, den musst du schon konvertieren
    z.B. so:

    Reihe = Convert.ToInt32(Console.ReadLine().Trim());
    

    Dabei wandelt Convert.ToInt32(irgendwas) das irgendwas in einen Int32 um, oder wenn nicht möglich wird ne Exception geworfen.
    Das .Trim() bewirkt das Leerzeichen/Sonderzeichen(wie Zeilenumbruch-Zeugs) am Anfang und Ende des Strings entfernt werden. k.A. ob man das braucht.
    Wenn du Exceptions nicht magst, kannst du dir auch Int32.TryParse() angucken 😉

    ...und das Zeichen solltest du als Zeichen markieren, sonst sucht der Compiler nach ner Variable J:

    if (Antwort == 'J')
    


  • Danke, jetzt funktioniert alles. Das zweitere war schluderei 😉


Anmelden zum Antworten