10 svar
205 visningar
SaraDK 8
Postad: 6 sep 2023 19:56 Redigerad: 25 sep 2023 19:24

fråga om C#, mitt program fungerar när den körs men "debug" protesterar. (nybörjare)

Fråga från nybörjare:
Jag klistrar in min kod sist i frågan. Det fungerar så att det det jag skriver i .... konsollen(? osäker på termerna, ny på detta) ska användas i svaret.

När jag kör koden så funkar den fint men om jag gör "Debug" så får jag följande felmeddelande på rad 8 och 10:
"converting null lieral or possible null value to non-nullble type. (CS8600)

är något fel och i så fall vad?

namespace Uppg2._1;

class Program
{
    static void Main(string[] args) 
    { 
        Console.WriteLine("Vad heter du?");
        string namn = Console.ReadLine();
        Console.WriteLine("Vilket är ditt dromresmal?");
        string mal = Console.ReadLine();
        Console.WriteLine("Hej " + namn + " Jag hoppas du far aka till " + mal);
        Console.ReadLine();
    }
}
SaraDK 8
Postad: 6 sep 2023 20:19

Samma fel i nästa uppgift, där kommer felmeddelandet på rad 9 och 10, men bara när jag kör Debug. Det går bra att köra koden?
Så här ser min kod ut. Den ska ge mig svar på frågan om årtal om 20 år, givet att jag ger den det aktuella årtalet. Och det gör den. 

namespace Uppg2._2Bok;

class Program
{
static void Main(string[] args)
{
{
Console.WriteLine("Vilket artal ar det");
string artalText = Console.ReadLine();
int artal = int.Parse(artalText);
int artalOm20 = artal + 20;
Console.WriteLine("Om 20 ar ar det " + artalOm20);
Console.ReadLine();
}
}
}

Ruben 71
Postad: 6 sep 2023 20:25 Redigerad: 6 sep 2023 20:26

Felmeddelanden kan vara krångliga att förstå i början, men dom är för det mesta väldigt logiska (vilket iofs kan vara anledningen till att de är krångliga...). Kämpa på!

null i C# är ett värde som är just ingenting. Inte att förväxla med 0, som ju faktiskt är ett tal. Ett exempel på när null är använbart att ha är just med funktionen Console.ReadLine(). Om funktionen inte kan få tag på nästa 'line' returnerar den null för att visa detta.

Om vi tittar på felmeddelandet igen så säger den i princip att "du försöker ge värdet null till en variabel som inte kan vara null". Datatypen string kan alltså inte vara null.

Nu har inte jag så mycket erfarenhet alls med C#, men min gissning är att när du kör i Debug-läget så kan ingen input tas, och Console.ReadLine() kommer returnera null. Det är alltså inget att bry sig om så länge du får rätt output när du kör som vanligt.

Konsollen är rätt term förresten. Eller terminalen som den också kallas.

Ruben 71
Postad: 6 sep 2023 20:35

Kan också tillägga att Debug-läget eventuellt kan bete sig annorlunda beroende på vilken kompilator, IDE och dator du använder.

Fermatrix 7841 – Fd. Medlem
Postad: 7 sep 2023 10:08

Problemet ligger i att readline kan returnera null om användare i konsolen kör ctrl+z, därför får du en varning av din kompilator.

Du kan ignorera de för tillfället. 

Prova annars:

if(!string.IsNullOrEmpty(input))

{

    // gör ngt

}

Laguna Online 30472
Postad: 7 sep 2023 10:13

Man tycker ju att det ska gå att debugga programmet, alltså köra det samtidigt som man får se vad det gör, precis som man tänker köra programmet på riktigt. Finns det kanske nånstans att skriva in input i debug-läget som du inte har upptäckt?

Fermatrix 7841 – Fd. Medlem
Postad: 7 sep 2023 18:19

Ja, det låter lite tveksamt att man inte kan mata in input medan man debuggar.

SaraDK 8
Postad: 7 sep 2023 21:27
Dracaena skrev:

Problemet ligger i att readline kan returnera null om användare i konsolen kör ctrl+z, därför får du en varning av din kompilator.

Du kan ignorera de för tillfället. 

Prova annars:

if(!string.IsNullOrEmpty(input))

{

    // gör ngt

}

nice har precis börjat med if-satser :) nice

SaraDK 8
Postad: 7 sep 2023 21:36

tack för alla svar! Nu har plötsligt Debug slutat klaga? ej ändrat koden dock...
Men: nej jag kan inte mata in input under Debug, det kommer inte upp någon konsoll att skriva i. Den dyker bara upp när jag trycker på play.
Jag har Visual Sudio för Mac om det spelar någon roll.

Fermatrix 7841 – Fd. Medlem
Postad: 7 sep 2023 22:14 Redigerad: 7 sep 2023 22:17

Är du säker på att du har steppat fram till en readline? Prova steppa och se om inte din debugger sedan stannar upp. Om så är fallet väntar den på input.

Jag drog en snabb sökning då jag inte använder mac och hittade följande SO tråd:

https://stackoverflow.com/questions/41195432/debug-console-window-cannot-accept-console-readline-input-during-debugging

Prova och se om det fungerar. Jag brukar inte sitta i C#, så någon annan kanske har bättre koll. 


EDIT: Tråden handlade förviso om vsc, vilket SaraDK inte sa att hen använde! :)

Tegelhus 225
Postad: 7 sep 2023 22:55

Nu har jag inte hållit på med C# utan snarare mer bekant med Java / Kotlin, men av att läsa dokumentation så verkar string inte vara nullable by default. Alltså, en stringvariabel kan inte hålla ett null-värde om du inte säger att den ska kunna det, medan Console.ReadLine() potentiellt kan returnera null.

Du borde kunna säga att din variabel ska kunna ta emot null genom att lägga till ett frågetecken:

string? mal = Console.ReadLine();

Då vill man nog gärna också egentligen kolla ifall variabeln blir null och hantera det fallet.

Med reservation som sagt för att jag inte är van vid språket så kan vara värt att dubbelkolla

Svara
Close