Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 19:50   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию C# Visual

Уважаемые форумчане, не могли бы Вы мне подсказать, как правильно оформить условие цикла do ... while

Пользователь вводит размер квадрата до 20. Если пользователь ввел неправильное число или букву, мы вновь запрашиваем ввод параметра. С цифрами я разабралась, букву он тоже различает, но когда он ругается на условие (в скобках) while, связанное с буквой и не запрашивает вновь параметр . А как должно быть это условие правильно написано?

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Praktika
{
    class Program
    {
        static void Main(string[] args)
        {
            
            char repeate;
            do
            {


                Console.Clear();///Очищаем экран

                Int16 n;
                do
                {
                    Console.Write("Vvedite razmer storoni kvadrata ot 1 do 20: ");
                    ///////////////////////////проверка - пользователь ввел цифру или букву?
                  
                    bool result;

                    result = Int16.TryParse(Console.ReadLine(), out n);
                    if (result == false)
                    {
                        Console.WriteLine("Vy nepravilno vveli razmer storony  kvadrata. Eto dolzno byt chislo.");
                    }
                    else
                    {
                        break;
                    }
                    ////////////////////////////////////////////////////////
                    n = Int16.Parse(Console.ReadLine());

                    /////Проверка правильности ввода
                   
                    if (n < 1 || n > 20)
                    {
                        Console.WriteLine("Vy nepravilno vveli razmer storony  kvadrata!");
                    }

                    else
                    {

                        result = Int16.TryParse(Console.ReadLine(), out n);
                        if (result == false)
                        {
                            Console.WriteLine("Vy nepravilno vveli razmer storony  kvadrata. Eto dolzno byt chislo.");
                        }

                        else
                        {
                            break;
                        }

                       
                    }
                }

                while (n < 1 || n > 20 || result == false);
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 08.02.2012, 20:07   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Можно вот так:
Код:
using System;
 
class Program {
 
  public static void Main(string[] args) {
    bool done = false;
    int n;
 
    do {
      Console.WriteLine ("Vvedite chislo ot 1 do 20: ");
      if (int.TryParse(Console.ReadLine(), out n) && n > 1 && n < 20)
        done = true;
      else
        Console.WriteLine ("Nevernoe chislo, poprobujte esche raz");
    } while (!done);
 
    Console.WriteLine ("{0}^2 = {1}", n, n * n);
  }
}
Но вообще говоря, в переменной done особой необходимости нет, можно просто поставить вечный цикл и break в положительной ветви if'а
netrino вне форума Ответить с цитированием
Старый 08.02.2012, 20:15   #3
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Код:
 static void Main(string[] args)
        {   
            int inputValue;
            while (true)
            {
                Console.Write("Input size of squre: \t ");
                if (int.TryParse(Console.ReadLine(), out inputValue) && inputValue > 0 && inputValue < 20) break;
                Console.WriteLine("Incorrect value, values mast be in [1..19] interval");
            }
            Console.WriteLine("You did it !!!");
            Console.ReadKey(true);
        }
не успел (((
rUs_LAN вне форума Ответить с цитированием
Старый 08.02.2012, 20:39   #4
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Дорогой netrino и Руслан, спасибо!

Буду адаптировать код под Вашу идею. Мне казалось, что у меня просто неправильно прописано условие while в скобках и можно что-то внутри просто довинтить.

А Ваш код, Руслан, очень изящный))))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 08.02.2012, 20:56   #5
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Справедливости ради хочу отметить, что мой код точное отображение комментариев netrino к своему коду.
rUs_LAN вне форума Ответить с цитированием
Старый 08.02.2012, 22:05   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Не просто ларчик открывался....

Вот, Руслан, практический вопрос - у меня дальше идет кусок, полностью рабочий, где пользователь выбирает цвет и способ заполнения квадрата. А у меня дальше после Вашего примера кода этот блок не идет.... Я и так связывала эти куски, и сяк - не продолжается действо дальше. Что надо написать, после Вашего образца, чтобы он стал дальше код следующего куска видеть?
Вот фрагмент
Код:
 Console.Write("Vybirite tsvet:green, blue, red: ");
               
                ConsoleKeyInfo color = Console.ReadKey();
                char colorChar = color.KeyChar;
Прошу прощения, я только осваиваю этот язык, очень сложно пока привыкнуть к его принципам.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan

Последний раз редактировалось Blondy; 08.02.2012 в 22:28.
Blondy вне форума Ответить с цитированием
Старый 08.02.2012, 22:39   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Прошу прощения
Аналогично. Однако осмелюсь превратить твой код в нечто типа Оптимуса Примуса из знаменитого фильма:
Код:
            Console.Clear();///Очищаем экран
            Int16 n;
            for (; true; )  {
                for (bool result = Int16.TryParse(Console.ReadLine(), out n); !result; result = Int16.TryParse(Console.ReadLine(), out n))
                    Console.WriteLine("Vy nepravilno vveli razmer storony  kvadrata. Eto dolzno byt chislo.");
                if (n > 1 && n < 20) { break; }
                Console.WriteLine("Vy nepravilno vveli razmer storony  kvadrata!");
            }
            Console.ReadKey();
Если я конечно правильно понял твою задумку, то вот такая реализация мне кажется более красивой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.02.2012, 23:19   #8
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Виталик, это все прекрасно, если вводишь цифру все идет, а если букву, он пишет об ошибке, но дальше ничего не запрашивает......А он должен запрашивать снова ввод параметра..Вот я и сижу.....
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 08.02.2012, 23:24   #9
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Stilet

тогда уж
Код:
for(;;)
rUs_LAN вне форума Ответить с цитированием
Старый 08.02.2012, 23:39   #10
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

В общем, дорогие мальчики, тестовые испытания показали, что в моей итоговой сборке код netrino оказался самый реализуемый. Отрабатывает, как надо...

Ну не гуру я еще пока, чтобы адаптировать нерабочие куски....не хватает пока интеллекта.
Я у преподавателя обязательно спрошу, почему не отработал как надо именно мой вариант и что надо довинтить, чтобы сработал, как надо.

Всем спасибо!!!!

Я всем уже по плюсу поставила))) Кроме Виталика - до сих пор не разрешают ему еще плюсовать(((
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual C++, Visual C#, Visual basic .Net, или Microsoft.Net Что лучше? _PROGRAMM_ Общие вопросы .NET 14 10.10.2012 19:24
Проблема с windows visual styles в Visual studio 2008 express. [awa Visual C++ 2 09.01.2010 06:05
Как перевести проект из Visual C++ 2003 в Visual C++ 2008? iukash Visual C++ 8 17.04.2009 22:36
Visual c++ 2005 и Visual c++ 6 это разные версии или нет? Руслантус Свободное общение 3 30.11.2007 19:42