Gå til innhold

Anbefalte innlegg

er veldig ny i C#, men har drevet litt med HTML, batch og Visual basic (startet med VB denne helga), og har lastet ned og installert Cosmos boot templaten til C#. Har i første rekke tenkt å legge til mulighet for å slå av og starte på nytt OSet, er ganske greit å ha det i et OS :p.

 

har prøvd meg litt fram med if kommandoen, men blir bare feil, og kan ikke builde skiten. så lurer på om noen kan gi meg ett eksempel på if kommandoen, bare slik at jeg kan se hvordan det er bygd opp (skal skaffe meg en C# bok snart, men akku

Lenke til kommentar
Videoannonse
Annonse

if er en konstruksjon som at ett argument, og utføre det som står i første del dersom uttrykket evaluerer til true. Dersom det evaluerer til false, utføres else blokken. Dersom neste er et else if uttrykk, fortsetter det som forventet.

 

if(Environment.NewLine == "\r\n")
 MessageBox.Show("Linjeskift er carriage return, newline");
else
 MessageBox.Show("Linjeskift er newline.");

 

if(100 < 1000)
{
 Console.WriteLine("hundre er mindre enn tusen");
 Console.WriteLine("Sånn det er skrevet her så vil alltid dette skje.");
}
else
{
 Console.WriteLine("Dette vil aldri skje");
 Console.WriteLine("Ettersom hundre ALLTID vil være mindre enn tusen.");
}

 

Som du ser her, er klammeparantesene unødvendig dersom det kun er én linje med kode som utføres (slik som End If er unødvendig i Visual Basic dersom hele If uttrykket passer på en linje)

 

Men merk at if MÅ ha paranteser i C#, mens det er unødvendig i Visual Basic. C# bruker også klammeparanteser istedet for den mer klassiske begin/end blokken i Visual Basic.

Lenke til kommentar

if er en konstruksjon som at ett argument, og utføre det som står i første del dersom uttrykket evaluerer til true. Dersom det evaluerer til false, utføres else blokken. Dersom neste er et else if uttrykk, fortsetter det som forventet.

 

if(Environment.NewLine == "\r\n")
 MessageBox.Show("Linjeskift er carriage return, newline");
else
 MessageBox.Show("Linjeskift er newline.");

 

if(100 < 1000)
{
 Console.WriteLine("hundre er mindre enn tusen");
 Console.WriteLine("Sånn det er skrevet her så vil alltid dette skje.");
}
else
{
 Console.WriteLine("Dette vil aldri skje");
 Console.WriteLine("Ettersom hundre ALLTID vil være mindre enn tusen.");
}

 

Som du ser her, er klammeparantesene unødvendig dersom det kun er én linje med kode som utføres (slik som End If er unødvendig i Visual Basic dersom hele If uttrykket passer på en linje)

 

Men merk at if MÅ ha paranteser i C#, mens det er unødvendig i Visual Basic. C# bruker også klammeparanteser istedet for den mer klassiske begin/end blokken i Visual Basic.

Takker, Geir, er veldig fint at du ikke sier noe om grunnen til at jeg skal ha if strukturen, var redd for å få kommentarer om dette.:p

Du skriver også veldig greit og fint, og jeg tror at en nybegynner faktisk kan forstå dette (hvis personen har litt kunnskap, og forstår hva av dette som er komandoer og slikt, moren min kunne aldri ha fortstått dette :p)

Lenke til kommentar

Møtte på ett lite problem til: sette koden til å lese fra en string. er vant med at man enten skriver

set string=verdi

eller

dim string as string = "noe"

, men hvordan gjør man det i C#? skal ha det til å lese input fra brukeren, og så sette det i en string, som da if leser, og som den velger hva den skal gjøre

 

Her er koden som jeg har til nå (Ja, jeg vet at det ikke er mye, men det er jo en start)

using System;
using Cosmos.Compiler.Builder;


namespace Augustuen_OS
{
   class Program
   {
       #region Cosmos Builder logic
       // Most users wont touch this. This will call the Cosmos Build tool
       [sTAThread]
       static void Main(string[] args)
       {
           BuildUI.Run();
       }
       #endregion

       // Main entry point of the kernel
       public static void Init()
       {
           var xBoot = new Cosmos.Sys.Boot();
           xBoot.Execute();
           Console.WriteLine("Welcome to Augustuen OS! This is a alpha release, and does not have a GUI");
           Console.WriteLine("Please enter in a command to begin: ");
           Console.WriteLine("1. Shutdown - Shutdown the computer");
           Console.WriteLine("2. Reboot - Reboot the computer");
           cmd = Console.ReadLine();
           if (cmd == "shutdown")
           {
               Cosmos.Sys.Deboot.ShutDown();
           }
           else
           {
               if (cmd == "reboot")
               {
                   Cosmos.Sys.Deboot.Reboot();
               }
           }

           while (true)
               ;
       }
   }
}

Lenke til kommentar

C# er annerledes ved at det er to forskjellige operatører:

= som er til for å sette verdien til en variabel

int a = 10;
a = 20;

== er sammenligning

 

if(a == 10)
{
 // blabla
}
bool c = a == 10; // sett c til true dersom a er 10

prøvde med int din, men nå får jeg opp at den ikke kan konvertere string (console.readline()) til int, hvordan får jeg til dette da? :hmm:

Lenke til kommentar

C# har ingen automatisk datatypekonvertering. For å konvertere string til int brukes int.Parse eller int.TryParse.

Andre veien går derimot enklere, ettersom nesten alle datatyper har en .ToString metode.

 

 

int i = int.Parse(Console.ReadLine());

Merk dog at int.Parse gir exception dersom brukeren taster inn noe som ikke er et integer, mens TryParse returnerer false.

Lenke til kommentar

C# har ingen automatisk datatypekonvertering. For å konvertere string til int brukes int.Parse eller int.TryParse.

Andre veien går derimot enklere, ettersom nesten alle datatyper har en .ToString metode.

 

 

int i = int.Parse(Console.ReadLine());

Merk dog at int.Parse gir exception dersom brukeren taster inn noe som ikke er et integer, mens TryParse returnerer false.

ok, fikk fikset det (skrev console.readline() == "shutdown"), men når jeg booter .iso fila, og skriver inn shutdown, så stopper den der.

 

Koden:

using System;
using Cosmos.Compiler.Builder;


namespace Augustuen_OS
{
   class Program
   {
       #region Cosmos Builder logic
       // Most users wont touch this. This will call the Cosmos Build tool
       [sTAThread]
       static void Main(string[] args)
       {
           BuildUI.Run();
       }
       #endregion

       // Main entry point of the kernel
       public static void Init()
       {
           var xBoot = new Cosmos.Sys.Boot();
           xBoot.Execute();
           Console.WriteLine("Welcome to Augustuen OS! This is a alpha release, and does not have a GUI");
           Console.WriteLine("Please enter in a command to begin: ");
           Console.WriteLine("1. Shutdown - Shutdown the computer");
           Console.WriteLine("2. Reboot - Reboot the computer");
           if (Console.ReadLine() == "shutdown")
           {
               Cosmos.Sys.Deboot.ShutDown();
           }
           else
           {
               if (Console.ReadLine() == "reboot")
               {
                   Cosmos.Sys.Deboot.Reboot();
               }
           }

           while (true)
               ;
       }
   }
}

Lenke til kommentar

C# har ingen automatisk datatypekonvertering. For å konvertere string til int brukes int.Parse eller int.TryParse.

Andre veien går derimot enklere, ettersom nesten alle datatyper har en .ToString metode.

 

 

int i = int.Parse(Console.ReadLine());

Merk dog at int.Parse gir exception dersom brukeren taster inn noe som ikke er et integer, mens TryParse returnerer false.

ok, prøver nå å få det til å lese en knapp isteden for en tekst kommando, siden det gikk rett vest, men får nå opp at den ikke kan konvertere "System.ConsoleKeyInfo" til string, any clue? :hmm:

Console.WriteLine("Welcome to Augustuen OS! This is a alpha release, and does not have a GUI");
           Console.WriteLine("Please press a button to begin: ");
           Console.WriteLine("s. Shutdown - Shutdown the computer");
           Console.WriteLine("r. Reboot - Reboot the computer");
           Console.ReadKey();
           string Key =  Console.ReadKey();
           Console.WriteLine(Key);

 

(prøver først å få den til å lese opp knappen til meg, slik at jeg vet hvordan det skal brukes videre ;)

Lenke til kommentar

Ikke gi opp.

 

Console.ReadLine skal fungere.

bool echo = true;
while(true)
{
 string input = Console.ReadLine();
 if(echo)
   Console.WriteLine(input);
 switch(input)
 { 
   case "shutdown":
     Cosmos.Sys.Deboot.ShutDown();
     break;
   case "restart":
     Cosmos.Sys.Deboot.Reboot();
     break;
   case "echo":
     echo = !echo;
     Console.WriteLine("Echo is " + (echo ? "on" : "off"));
     break;
   default:
     Console.WriteLine("Bad command or file name.");
     break;
 }
}

 

Så skal den skrive ut alt du skriver inn. Da kan du sjekke at det du får er riktig.

Lenke til kommentar

Ikke gi opp.

 

Console.ReadLine skal fungere.

bool echo = true;
while(true)
{
 string input = Console.ReadLine();
 if(echo)
   Console.WriteLine(input);
 switch(input)
 { 
   case "shutdown":
     Cosmos.Sys.Deboot.ShutDown();
     break;
   case "restart":
     Cosmos.Sys.Deboot.Reboot();
     break;
   case "echo":
     echo = !echo;
     Console.WriteLine("Echo is " + (echo ? "on" : "off"));
     break;
   default:
     Console.WriteLine("Bad command or file name.");
     break;
 }
}

 

Så skal den skrive ut alt du skriver inn. Da kan du sjekke at det du får er riktig.

shutdown fungerer, (den sier shutdown etterpå) men reboot så er den litt ødelagt: den sier reboot, men den sier også "Bad command or file name"

 

Edit: har bestilt bok nå, laster ned :D

Endret av zeezy
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...