2017-01-24 11 views
-1

Самоучитель себя C# Я нашел «вызов для кодирования» для практики, но мне сложно понять, как выполнить одно из требований.Консольное приложение - изменение определенного цвета текста внутри строкового массива

Это абсолютно необходимо сделать в приложении C# Console - просто выбрасывать это из-за того, что я уже провел свое исследование, и большинство ответов, которые я нашел, «использовали это вместо этого».

Задача довольно легко достичь, это текстовая версия деятельности Mablibs где вы попросить пользователя ввести имя существительное, глагол и т.д.

Что я сделал до сих пор было создание двух строковых массивов, один, содержащий различные типы слов он собирается попросить пользователя:

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

и другой массив, содержащий входные данные пользователей, так как я собираюсь использовать цикл для получения их входы, что-то похожее на это:

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

И, конечно, я набрал всю активность, чтобы отобразить входные данные пользователей.

НО, я должен подчеркнуть изменения и это говорит либо:

Подчеркнуть изменения - что я продолжал видеть, что это не возможно в консоли App.

Все капиталы - что было бы легким путем, но я хочу узнать что-то другое.

Жирный изменения - я побежал в StringBuilder и < б> </b> в основном для этого и пытался это самостоятельно, но не смог заставить его работать.

Различный цвет - Я знаю, что могу использовать Console.ForegroundColor = ConsoleColor.Magenta ;, но я только хочу изменить цвет ввода пользователем. Я видел много способов «сделать это», но каждый раз, когда я пробовал, он менял бы все.

Если кто-то может оказать некоторую помощь, я бы очень признателен этому.

Спасибо.

EDIT:

Пример того, что я пытаюсь достичь

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(); 
} 

Тогда давайте говорить, что пользователь ввел: птица, плавать, 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 

Окончательный выход : A bird любит много есть. Он любит плавать в облачно глядя воды.

Я надеюсь, что это поможет вам понять.

+0

Вы пробовали 'Console.ForegroundColor = ConsoleColor.White;' после WriteLine для цветной линии ответа? – JohnG

+0

Вам нужно всего лишь 6 отдельных вызовов Console.Write(), чтобы вы могли изменить свойство ForegroundColor. Очень просто. –

ответ

0

Как предложил Ханс, вам придется изменить свойство цвета переднего плана примерно в 6 раз (согласно вашему окончательному результату). Лучшее, что вы можете сделать, это поставить эту логику в цикле.

Вот один из способов:

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++; 
     } 
    } 

Обратите внимание, что это очень простой код. Он взрывается, если формат не такой, как он ожидает. И вам нужно будет добавить дополнительный код, если вы хотите печатать фигурные скобки в своем конечном выпуске.

+0

Я изменил его по-своему, следуя вашему руководству, и он работает, большое вам спасибо! – Pandda

0

Это мне не ясно, что именно вы пытаетесь достичь, но я могу окрасить только текст, используя следующие:

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

Если это все равно не поможет, вам нужно чтобы опубликовать более полный код с лучшим описанием того, что именно вы пытаетесь выполнить.

+0

Добавлен пример того, что я ищу – Pandda

0

Используйте Console.Write вместо Console.WriteLine(), чтобы упростить ... Создайте метод, который принимает существительное, глагол и прилагательное. Пример.

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

Метод для этого.

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(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^