2017-01-24 1 views
-1

Selbstlernend C# Ich habe eine "Coding Challenge" für die Praxis gefunden, aber es fällt mir schwer zu verstehen, wie man eine der Anforderungen erfüllt.Konsolenanwendung - Ändern der spezifischen Textfarbe in einem String-Array

Es muss unbedingt in der C# -Konsolenanwendung gemacht werden - ich werfe das da draußen hin, weil ich meine Nachforschungen gemacht habe und die meisten Antworten, die ich gefunden habe, waren "benutze das stattdessen".

Die Herausforderung ist recht einfach zu erreichen zu, es ist eine Mablibs Textversion Aktivität ist, wo Sie den Benutzer zur Eingabe bitten um ein Substantiv, Verb usw.

Was ich bisher zwei String-Arrays getan hat erstellen, die verschiedenen Arten von Wörtern ein, es wird bitten, den Benutzer enthält:

string[] prompt = {"noun","verb","adverb"} //this contains 12 strings 

und ein anderes Array, das die Benutzer Eingang enthält, da werde ich ein verwenden, um Schleife zu erhalten ihre Eingaben, etwas ähnliches wie folgt aus:

For (int i = 0; i < userAnswer.Length; i++) 
{ 
Console.Write("Please enter a/an " + prompt[i] + ": "); 
userAnswer[i] = Console.ReadLine(); 
} 

Und natürlich tippte ich die ganze Aktivität aus, um dann die Benutzereingaben anzuzeigen.

ABER, ich muss die Änderungen hervorheben und es sagt, entweder zu:

die Änderung Unterstrichen - was ich sehen gehalten, dass diese in Console App nicht möglich ist.

Alle Hauptstädte - was wäre die einfache Route, aber ich möchte etwas anderes lernen.

Bold die Änderungen - ich in String lief und < b> </b> vor allem für diese und versuchte es auf meinem eigenen, war aber nicht in der Lage, es zu bekommen zu arbeiten.

Eine andere Farbe - Ich weiß, ich kann Console.ForegroundColor = ConsoleColor.Magenta; verwenden, aber ich möchte nur die Farbe der Benutzereingabe ändern. Ich sah viele Möglichkeiten, "es zu tun", aber jedes Mal, wenn ich es versuchte, würde sich alles ändern.

Wenn jemand Hilfe bieten könnte, würde ich das wirklich zu schätzen wissen.

Danke.

EDIT:

Ein Beispiel dafür, was ich versuche,

string[] answerHolder = {"","",""}; //MY originaly code has 13, but I am doing 3 to write it out faster 
string[] prompt = {"noun", "verb", "adjective"}; 

Console.Readline("Help me finish the story:"); 
Console.Readline("A <noun> likes to eat a lot. It likes to <verb> in the <adjective> looking water. "); 
//then it will ask the user to enter a noun, verb, and adjective 
for(int i = 0; i < answerHolder.Length; i++) 
{ 
Console.Write("Please enter a/an " + prompt[i] + ": "); 
answerHolder[i] = Console.ReadLine(); 
} 

Dann lassen Sie uns sagen, dass der Benutzer eingegeben zu erreichen: vogel, schwimmen, cloudly

//Then I want to display it back but change the color of each 
//element that was stored inside answerHolder to emphasize what they entered 
Console.Writeline("A {0} likes to eat a lot. It likes to {1} in the {2} looking water.", answerHolder[0], answerHolder[1], answerHolder[2]); 
//Code to change color or bold 

Endausgabe : A Vogel isst gerne viel. Es mag schwimmen in der cloudly suchen Wasser.

Ich hoffe, dass Sie das verstehen.

+0

Haben Sie 'Console.ForegroundColor = ConsoleColor.White;' nach der WriteLine für die farbige Antwortzeile versucht? – JohnG

+0

Sie benötigen nur 6 separate Console.Write() - Aufrufe, sodass Sie die ForegroundColor-Eigenschaft ändern können. Kinderleicht. –

Antwort

0

Wie Hans vorgeschlagen, werden Sie (wie pro Ihre endgültige Ausgabe) Vordergrundfarbe Eigenschaft um 6 mal zu ändern. Das Beste, was Sie tun können, ist, diese Logik in eine Schleife zu bringen.

Hier ist eine Art und Weise:

static void Main(string[] args) 
    { 
     string[] answerHolder = { "", "", "" }; //MY originaly code has 13, but I am doing 3 to write it out faster 
     string[] prompt = { "noun", "verb", "adjective" }; 

     Console.WriteLine("Help me finish the story:"); 
     Console.WriteLine("A <noun> likes to eat a lot. It likes to <verb> in the <adjective> looking water. "); 
     //then it will ask the user to enter a noun, verb, and adjective 
     for (int i = 0; i < answerHolder.Length; i++) 
     { 
      Console.Write("Please enter a/an " + prompt[i] + ": "); 
      answerHolder[i] = Console.ReadLine(); 
     } 

     //Console.WriteLine("A {0} likes to eat a lot. It likes to {1} in the {2} looking water.", answerHolder[0], answerHolder[1], answerHolder[2]); 
     WriteFormattedLine("A {0} likes to eat a lot. It likes to {1} in the {2} looking water.", answerHolder); 

     Console.ReadLine(); 
    } 

    private static void WriteFormattedLine(string format, params string[] answers) 
    { 
     int formatLength = format.Length; 
     int currIndex = 0; 
     bool readingNumber = false; 
     string numberRead = string.Empty; 
     while (currIndex < formatLength) 
     { 
      var ch = format[currIndex]; 
      switch (ch) 
      { 
       case '{': 
        Console.BackgroundColor = ConsoleColor.White; 
        Console.ForegroundColor = ConsoleColor.Magenta; 
        readingNumber = true; 
        numberRead = string.Empty; 
        break; 
       case '}': 
        var number = int.Parse(numberRead); 
        var answer = answers[number]; 
        Console.Write(answer); 
        Console.ResetColor(); 
        readingNumber = false; 
        break; 
       default: 
        if (readingNumber) 
         numberRead += ch; 
        else 
         Console.Write(ch); 
        break; 
      } 

      currIndex++; 
     } 
    } 

Beachten Sie, dass diese sehr einfache Code. Es explodiert, wenn das Format nicht so ist, wie es erwartet. Und Sie müssen zusätzlichen Code hinzufügen, wenn Sie Klammern in Ihrer endgültigen Ausgabe drucken möchten.

+0

Ich änderte es meinen eigenen Weg, indem ich Ihrer Richtlinie folgte und es funktioniert, vielen Dank! – Pandda

0

Es ist mir nicht klar, genau das, was Sie versuchen zu erreichen, aber ich bin nur in der Lage, etwas Text Farbe mit dem folgenden:

Console.BackgroundColor = ConsoleColor.Blue; 
    Console.ForegroundColor = ConsoleColor.White; 
    Console.Write("White on blue,"); 
    Console.ResetColor(); 
    Console.Write("but this isn't."); 

Wenn dies immer noch nicht hilft, müssen Sie um ein vollständigeres Codebeispiel mit einer besseren Beschreibung dessen, was genau Sie erreichen möchten, zu veröffentlichen.

+0

Hinzugefügt ein Beispiel von dem, was ich suche – Pandda

0

Verwenden Sie Console.Write anstelle von Console.WriteLine(), um Dinge zu vereinfachen ... Machen Sie eine Methode, die das Nomen, Verb und Adjektiv nimmt. Beispiel.

PrintAnswer("bird", "swim", "cloudy"); 

Die Methode dafür.

private static void PrintAnswer(string noun, string verb, string adjective) { 
    Console.Write("A "); 
    Console.ForegroundColor = ConsoleColor.Yellow; 
    Console.Write(noun); 
    Console.ForegroundColor = ConsoleColor.White; 
    Console.Write(" likes to eat a lot. It likes to "); 
    Console.ForegroundColor = ConsoleColor.Yellow; 
    Console.Write(verb); 
    Console.ForegroundColor = ConsoleColor.White; 
    Console.Write(" in the "); 
    Console.ForegroundColor = ConsoleColor.Yellow; 
    Console.Write(adjective); 
    Console.ForegroundColor = ConsoleColor.White; 
    Console.WriteLine(" looking water."); 
    Console.ResetColor(); 
}