Вы можете использовать метод Console.SetCursorPosition
для установки позиции курсора перед написанием символа.Таким образом, вы можете написать один столбец, а затем перейти к следующему столбцу, не перезаписывая предыдущий.
Обратите внимание, что мы хотим использовать Console.Write
для записи символа, потому что Console.WriteLine
добавит новую строку кконец и испортит нашу сетку.
Предполагая, что вы используете только график высотой 10 символов (таким образом, числа от 1 до 100), вы можете определить, какие строки должны быть заполнены внутри цикла, вычитая текущийитерация от 10 и проверка, является ли число больше или равно этому числу.
Это может иметь больше смысла в коде:
Random rnd = new Random();
static void Main()
{
// Populate a list of 30 random numbers from 1 to 100
var randomNumbers = Enumerable.Range(0,30).Select(i => rnd.Next(1, 101)).ToList();
// Output our numbers to the console as column headers
randomNumbers.ForEach(n => Console.Write(n.ToString().PadLeft(3)));
// Set the next cursor line as the top of the grid
var topOfGrid = Console.CursorTop + 1;
// For each number, divide by 10 and output the result to the console
for (int rndIndex = 0; rndIndex < randomNumbers.Count; rndIndex++)
{
// Capture the left for this column. We multiply the
// current index by 3 because we're spacing the columns
// 3 characters wide. Then add one so it prints
// in the middle of the column
var columnLeft = 3 * rndIndex + 1;
var result = randomNumbers[rndIndex] / 10;
for (int i = 0; i < 10; i++)
{
Console.SetCursorPosition(columnLeft, topOfGrid + i);
// Determine which character to write by comparing
// our number with the value of 10 - i
Console.Write(result >= 10 - i ? "*" : " ");
}
}
Console.WriteLine();
Console.ReadLine();
}
Выход