Есть программа,которая должна выводить слово,где буквы заменены на символ '_' и пользователь по 1 букве угадывает этого слово. Проблема в том,что программа выводит только 1 букву и заменяется тоже только по одной и после ввода слова по буквам не прекращает работать. Помогите найти ошибку.
string[] slovo = new string [] {"algoritm"};
char[] guess = new char[slovo.Length];
for (int p = 0; p < slovo.Length; p++)
guess[p] = '_';
while(true)
{
Console.WriteLine(guess);
char bukva = Convert.ToChar(Console.ReadLine());
for (int j=0; j < slovo.Length; j++)
{
if (slovo[j].Contains(bukva))
guess[j] = bukva;
else
Console.WriteLine("Takoj bukvi net!");
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
string slovo = "algoritm"; // Ваше слово
string guess = "________"; // Ваш ответ
StringBuilder sb = new StringBuilder(guess); // Для изменения букв по индексу
while(true)
{
Console.WriteLine(guess); // Выводим ваш ответ
char bukva = Convert.ToChar(Console.ReadLine()); // Считываем букву
for (int i = 0; i < slovo.Length; i++) // Лучше использовать массив, т.к. Contains показывает лишь 1 вхождение, а таких букв в слове может быть больше
{
if (slovo[i] == bukva)
{
sb[i] = bukva; // Если есть совпадение, заменяем '_' на эту букву
}
guess = sb.ToString(); // Приводим наш объект StringBuilder к типу String для WriteLine при следующей итерации
}
}
}
}
}
Надеюсь, условие выхода из программы допишете сами.
Также не забудьте вставить using System.Text
для работы с StringBuilder
.
UPDATE
Если вы решили использовать имя переменной guess
, соблюдайте то же для других имен. Прим. вместо slovo
используйте word
. Не очень хорошая практика давать такие разные названия.
string slovo = "algoritm";
char[] guess = new char[slovo.Length];
for (int p = 0; p < guess.Length; p++)
guess[p] = '_';
while (true)
{
Console.WriteLine(guess);
string bukva2 = Console.ReadLine();
char bukva = ' ';
if (bukva2.Length == 1)
bukva = Convert.ToChar(bukva2);
bool EstBukva = false;
for (int j = 0; j < slovo.Length; j++)
{
if (slovo[j] == bukva)
{
guess[j] = bukva;
EstBukva = true;
}
}
if (!EstBukva)
{
Console.WriteLine("Takoj bukvi net!");
Console.ReadKey(true);
}
Console.Clear();
}
Я бы сделал так
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется строка (появляется после клика по дереву):
как выставить у всех сразу параметр IsEnabled = false
Как программно пробросить порт (нужен пример на языке си шарп)