Добавление ввода в строку длиной не более 10 слов C# - PullRequest
0 голосов
/ 16 февраля 2020

Я создаю для учебы простую программу. В этой программе мне нужно составить предложение из 10 слов. Однако после последнего ввода я хочу остановить его. Итак, я попробовал следующее: создайте пустую строку с именем textt, используйте while l oop, так как я всегда делаю это так, что она будет продолжаться, создайте строку с присваиванием, которое будет показано в программе пользователю aSentence, который он вызвал, возьмите int с именем count и присвойте ему значение 0, затем я запускаю свой для l oop, я использую для l oop, потому что я могу добавить условие и итератор, чтобы он останавливался и, конечно, инициализатор.

В for l oop I: распечатать aSentence (пользователь прочитает это), я поместил строку с именем input и позволил пользователю вставить слово (я новичок, я не знаю знаю, как сделать ошибку, если пользователь вставил два слова, но это уже не назначение), я помещаю строку textt, поскольку они неизменны, но не здесь, и добавляю "" для создания пустого пространства и, конечно, ввода. Затем я распечатываю текст, записанный пользователем, и увеличиваю (если я правильно говорю) на i ++.

Затем я запускаю оператор if, который говорит, что если я (см. My для l oop) равно == 9, потому что я увеличиваю это в my для l oop, он должен распечатать конец предложения, показать весь текст, а затем разбить.

Однако по какой-то причине l oop бесконечен при каждом вводе чего-либо. И строка Конец предложения будет отображаться время от времени и сейчас, когда l oop должен быть закончен в 9. Мой вопрос, как мне исправить это, чтобы убедиться, что предложение заканчивается, когда 10 слов были введены пользователем и В конце предложения выскакивают ровно 10 входных слов.

using System;

namespace Opgave_10_woorden_invoegen_in_1_string_plakken
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a program that stops after input of 10 words
            string textt = "";
            while (true)
            {
                string aSentence = new string("We are making a sentence of 10 words.");
                int count = 0;
                for (int i = 0; i < 9; i++)
                {
                    Console.WriteLine(aSentence);
                    string input = Console.ReadLine();
                    textt = textt + " " + input;
                    Console.WriteLine(textt, i++);
                    if (i == 9)
                    {
                        Console.WriteLine("End of the sentence", textt);
                        break;
                    }
                }
            }
        }
    }
}

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Объединение моих комментариев в ответ:

  1. while(true) будет выполняться вечно (если какой-то код не вызывает break). Ваш внутренний for l oop должен нормально работать - почему бы просто не удалить while l oop?

  2. И условие для l oop должно быть < 10, так как вы хотите 10 элементов, и отсчет начинается с 0. И вам не нужен оператор break внутри for l oop, так как условие встроено в оператор for.

  3. Также есть проблема в том, что вы увеличиваете i в два раза: один раз в итераторе оператора for и снова в теле для l oop, поэтому i станет 9 всего за 5 итераций. Удалить внутренний прирост. См. for документацию инструкции здесь .

  4. Кроме того, вам не нужно вызывать строковый конструктор для строкового присваивания (это даже компилируется? ). Просто присвойте строку: string aSentance = "We are making a sentence of 10 words.";

  5. Наконец, вы можете посмотреть документацию для Console.WriteLine. Вторая переменная, которую вы передаете ей, вряд ли будет такой, какой вы думаете.

Чтобы поместить все это в пример:

static void Main()
{
    //Create a program that stops after input of 10 words
    string textt = "";
    string aSentence = "We are making a sentence of 10 words.";

    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(aSentence);
        textt = textt + " " + Console.ReadLine();
        Console.WriteLine(textt);
    }

    Console.WriteLine("End of the sentence");
    Console.ReadKey();
}
0 голосов
/ 16 февраля 2020

Вы while (true) оператор означает, что ваш l oop работает вечно.

Вы пытаетесь выйти из этого с помощью break. Но так как это выполняется внутри внутреннего for l oop, то оно вырвется только из этого внутреннего l oop, а не из вашего внешнего while l oop, что вы и ожидаете.

Вам не нужно внешнее время, пока l oop, поэтому простое его удаление решит проблему.

Если вы хотите 10 входов, вам также нужно изменить for l oop для выполнения 10 итераций, а не 9, как в настоящее время.

Кроме того, вы должны использовать класс StringBuilder при объединении строк так много раз, поскольку это более эффективно. Подробнее см. https://www.dotnetperls.com/stringbuilder

...