Я пытаюсь закодировать проверку цикла while, чтобы проверить ответ пользователя всякий раз, когда он вводил предложение со следующими критериями:
Мне удалось заставить пустое или пустое условие работать должным образом, но «должно быть не менее шести слов» в настоящий момент не работает так, как предполагалось. Когда я печатаю предложение, состоящее менее чем из шести слов, оно нормально принимается. Однако, если я ввожу предложение из шести или более слов, оно выводит установленное сообщение об ошибке, хотя этого не должно быть.
while (String.IsNullOrEmpty(sentence) || sentence.Length != 6)
{
if (String.IsNullOrEmpty(sentence))
{
Console.WriteLine("Please, do not leave the sentence field empty!");
Console.WriteLine("Enter your desired sentence again: ");
sentence = ReadLine();
}
else
{
Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
Console.WriteLine("Enter a sentence with a least 6 words: ");
sentence = ReadLine();
}
}
Что именно я делаю не так?





Измените while (String.IsNullOrEmpty(sentence) || sentence.Length != 6) на
while (String.IsNullOrEmpty(sentence) || sentence.Split(' ').Length < 6)
@NTaveras, какой sentence вы вводили?
Вы ищете слова, а не символы в строке, пожалуйста, посмотрите мой ответ.
Ему нужно повторить тест на разделенной строке, а не просто попасть в блок else.
Ох, ладно! Теперь я понимаю, что вы имеете в виду.
@Steve, пока тест повторяется. Строка пуста или пуста, и пользователю будет предложено. Когда он пишет предложение менее 6 слов, ему подсказывают об этом, иначе он прерывается во время
string sentence = Console.ReadLine();
while (true)
{
if (String.IsNullOrEmpty(sentence))
{
Console.WriteLine("Please, do not leave the sentence field empty!");
Console.WriteLine("Enter your desired sentence again: ");
}
else if (sentence.Split(' ').Length < 6)
{
Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
Console.WriteLine("Enter a sentence with a least 6 words: ");
}
else break;
sentence = Console.ReadLine();
}
Должно быть <6, а не <5
sentence.Length возвращает количество символов в строке. Вы должны разбить предложение на слова.
string[] words = sentence.Split();
разбивается на символы пробела.
Следовательно, вы можете написать свой цикл как
while (String.IsNullOrEmpty(sentence) || sentence.Split().Length < 6)
{
...
}
Здесь Length - длина массива строк, полученного в результате разделения.
Обратите внимание, что в случае предложения null, оценка короткого замыкания логических выражений C# не будет выполнять подвыражение, следующее за ||. Следовательно, вы не получите исключения нулевой ссылки.
Во-первых, вы можете изменить свое состояние, как показано ниже ... это даст вам предложение длиной меньше шести в то время как (длина предложения <6) Если вы хотите получить слово длиной в шесть слов, попробуйте следующее условие ...
sentence.Split(' ').Length >= 6
// Сначала попробуйте изменить условие, как показано ниже .... затем попробуйте следующий код ..
public static void Main(string[] args)
{
int count = 0;
inputSteream:
Console.WriteLine("Enter your sentence: ");
string sentence = Console.ReadLine();
while (!String.IsNullOrEmpty(sentence) && sentence.Length >= 6)
{
foreach (var item in sentence.Split(' '))
{
if (item.Length >= 6)
{
Console.WriteLine("The sentece is {0}", item);
count++;
break;
}
}
break;
}
if (count == 0)
{
goto inputSteream;
}
Console.ReadKey();
}
это не намерение отрицать ответ других людей, когда вы думаете, что у вас есть лучший ответ ..
Извините, дорогой Олдерт. Я произошел по ошибке
Попробуйте, как показано ниже, пример кода
string sentence=Console.ReadLine();
if (String.IsNullOrEmpty(sentence))
{
Console.WriteLine("Please, do not leave the sentence field empty!");
Console.WriteLine("Enter your desired sentence again: ");
sentence = Console.ReadLine();
}
else if (sentence.Length!=6)
{
Console.WriteLine("\r\nThe sentece entered isn't valid. Must have a least six words!");
Console.WriteLine("Enter a sentence with a least 6 words: ");
sentence = Console.ReadLine();
}
else
{
Console.WriteLine("Your entered string length is'{0}' and word is{1}", sentence.Length,sentence);
}
Я добавил строку, которую вы предложили. Тем не менее, он по-прежнему выдает сообщение об ошибке, когда я ввожу слово длиной от шести слов.