Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вывод данных в C# после цикла For

14K
27 мая 2011 года
61201
31 / / 03.05.2007
Привет, есть данный класс. Он просит ввести количество повторений цикла и данные. Сразу после ввода данных он выводит данные на экран. Т.е. ввел 3 переменные, он сразу из и выводит. А мне нужно так, чтобы вначале запросило ввести все данные столько раз, сколько указано повторений циклов, а после этого сразу выводило все данные.
Как это сделать, либо какую функцию использовать.
И еще вопрос, как в мейне вызвать свойство реализованное в моем классе. При вызове оно мне почему-то вызывало переменную _c.
Заранее спасибо.
Код:
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Pupils
    {
        private int _a;
        private char _b;
        private double _c;
        private int _n;

        public Pupils()
        {
            string a = " ";
            string b = " ";
            string c = " ";
            string n = " ";

            Console.Write("Введите количество учеников: ");

            n = Console.ReadLine();

            int.TryParse(n, out _n);
           
            for (int col = 0; col < _n; col++)
            {
                Console.WriteLine("");
                Console.Write("Введите имя: ");
                b = Console.ReadLine();
                char.TryParse(b, out _b);
                Console.Write("Введите возраст: ");
                a = Console.ReadLine();
                int.TryParse(a, out _a);
                Console.Write("Введите средний балл: ");
                c = Console.ReadLine();
                double.TryParse(c, out _c);
                WriteData();
            }
           
        }

        public double Properties
        {
            get { return _c; }
            set
            {
                if (_c < 4)
                    Console.WriteLine("Ученик неуспевающий!");
                if ((_c >= 4) & (_c < 8))
                    Console.WriteLine("Ученик успевающий!");
                if (_c >= 8)
                    Console.WriteLine("Ученик отличник!");
            }
        }
        public void WriteData()
        {
                Console.WriteLine("");
                Console.WriteLine("Имя ученика: " + _b.ToString());
                Console.WriteLine("Возраст ученика: " + _a.ToString());
                Console.WriteLine("Средний балл ученика: " + _c.ToString());
                Console.WriteLine("");
                System.Console.Write(Properties); //Хочу тут юзать свойство
                Console.WriteLine("");
        }
    }
}
29K
27 мая 2011 года
Енот_в_Засаде
224 / / 09.11.2010
у вас в цикле
Код:
for (int col = 0; col < _n; col++)
            {
                Console.WriteLine("");
                Console.Write("Введите имя: ");
                b = Console.ReadLine();
                char.TryParse(b, out _b);
                Console.Write("Введите возраст: ");
                a = Console.ReadLine();
                int.TryParse(a, out _a);
                Console.Write("Введите средний балл: ");
                c = Console.ReadLine();
                double.TryParse(c, out _c);
                WriteData();
            }

после ввода данных вызывается функция WriteData(); , которая и выводит инфо на экран при каждой итерации цикла. Вам нужно просто убрать её из этого цикла, и вызывать эту функцию в другом цикле, например так:
Код:
for (int col = 0; col < _n; col++)
            {
                Console.WriteLine("");
                Console.Write("Введите имя: ");
                b = Console.ReadLine();
                char.TryParse(b, out _b);
                Console.Write("Введите возраст: ");
                a = Console.ReadLine();
                int.TryParse(a, out _a);
                Console.Write("Введите средний балл: ");
                c = Console.ReadLine();
                double.TryParse(c, out _c);
               // WriteData();
            }
             for (int col = 0; col < _n; col++)
            {
                  WriteData();
            }

а насчет свойства, вы вообще что хотели сделать? типа чтобы оно выводило строку "Ученик неуспевающий!" и т.п. в зависимости от значения с. Если да, то на мой взгляд удобнее было бы использовать метод, в который вы бы передавали значение с. Ну уж если хотите со свойствами, то тогда как-то так:
Код:
public string Properties
        {
           
            get
            {
                if (_c < 4)
                {
                    return "Ученик неуспевающий!";
                }
                if ((_c >= 4) & (_c < 8))
                {
                    return "Ученик успевающий!";
                }
                if (_c >= 8)
                {
                    return "Ученик отличник!";
                }
                else return null;
            }
                   
        }
        public void WriteData()
        {
                Console.WriteLine("");
                Console.WriteLine("Имя ученика: " + _b.ToString());
                Console.WriteLine("Возраст ученика: " + _a.ToString());
                Console.WriteLine("Средний балл ученика: " + _c.ToString());
                Console.WriteLine("");
                Console.WriteLine(Properties);//Хочу тут юзать свойство
                Console.WriteLine("");
        }
    }
297
27 мая 2011 года
koodeer
1.2K / / 02.05.2009
61201, мда-а...

Во-первых, переменным нужно дать нормальные названия: имя - name, возраст - age, и т.д.
Во-вторых, где проверка и обработка результатов методов TryParse ?
В-третьих, для имени выделена всего одна буква - char.
В-четвёртых, условие в свойстве желательно переписать с использованием else if (или switch).
14K
27 мая 2011 года
61201
31 / / 03.05.2007
1.Ну да, насчет имени переменных я знаю. Просто это не работа куда то, а просто для себя начал учить с# и сейчас разбираю классы.
Хочу понять как их лучше использовать.
2.В смысле проверка методов TryParse, если можете поясните.
3.Про чар понял, исправляюсь
4.
 
Код:
if ((_c >= 4) & (_c < 8))
                    Console.WriteLine("Ученик успевающий!");
                 if (_c >= 8)
                    Console.WriteLine("Ученик отличник!");
                 else
                    Console.WriteLineI("Ученик не успевающий!");

Таким образом оно неверно срабатывает. Потому не знаю как по другому.

По коменту енота, увы ничего правильно не сработало. Если добавить еще один цикл, то оно вообще как то неправильно выводит. С свойством так же, не желает возвращать строки
29K
28 мая 2011 года
Енот_в_Засаде
224 / / 09.11.2010
да согласен, чет я тупанул. У тебя данные при вводе ни куда не сохраняются, то есть ты ввел имя, возраст, балл для первого ученика, потом вводишь для второго, и получается что переменным которые хранят инфу о первом ученике, ты присваиваешь новые значения, и так далее. В результате у тебя в переменных будет информация только о последнем ученике.
297
28 мая 2011 года
koodeer
1.2K / / 02.05.2009
61201, лучше с самого начала прививать хороший стиль: давать правильные имена всем переменным, писать комментарии, и т. п. Это войдёт в привычку.


Если TryParse вернёт false, то последующий код не имеет смысла: ведь в переменной нет никакого значения (вернее, будет 0). Логичней всего требовать повторный ввод от пользователя, пока он не введёт правильные данные:
 
Код:
do
{
    Console.Write("Введите количество учеников: ");
    n = Console.ReadLine();
} while (!int.TryParse(n, out _n));

Аналогично поступить со всеми вводимыми числами.



Код с ифами:
 
Код:
if (_c >= 8)
    Console.WriteLine("Ученик отличник!");
else if (_c < 4)
    Console.WriteLine("Ученик не успевающий!");
else
    Console.WriteLine("Ученик успевающий!");

И, кстати, не путайте логическое и условное И! Оператор & и оператор && - разные вещи!



Задавать начальное значение строк в таком виде тоже не совсем правильно:
 
Код:
string a = " ";

Пробел в дальнейшем не используется. Поэтому лучше так:
 
Код:
string a = string.Empty;
14K
29 мая 2011 года
61201
31 / / 03.05.2007
Переделал, получилось таким образом:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassRoom
{
    class Pupils
    {
        private int _age;
        private string _name;
        private double _midball;
        private int _num;

        public Pupils()
        {


            //Объявляем переменные строками
            string age = string.Empty;
            string midball = string.Empty;
            string num = string.Empty;

            Console.Write("Введите количество учеников: ");
            num = Console.ReadLine();//читаем стринг
            int.TryParse(num, out _num);//преобразование в int

            //Проверка на ввод формата типа int и то, что число положительное
            while ((_num < 0) || (!int.TryParse(num, out _num)))
            {
                Console.WriteLine("Неверный формат ввода!");
                Console.WriteLine("Повторите попытку ввода заново...");
                Console.Write("Введите количество учеников: ");
                num = Console.ReadLine();//читаем стринг
                int.TryParse(num, out _num);//преобразование в int
            }
 
           for (int col = 0; col < _num; col++)
            {
                Console.WriteLine("");
                Console.Write("1. Введите имя: ");
                _name = Console.ReadLine();//читаем стринг

                Console.Write("2. Введите возраст: ");
                age = Console.ReadLine();
                int.TryParse(age, out _age);//преобразование в int
               //Проверка на ввод формата типа int и то, что число положительное
                while ((_age < 0) || (!int.TryParse(age, out _age)))
                {
                    Console.WriteLine("Неверный формат ввода!");
                    Console.WriteLine("Повторите попытку ввода заново...");
                    Console.Write("2. Введите возраст: ");
                    age = Console.ReadLine();//читаем стринг
                    int.TryParse(age, out _age);//преобразование в int
                }

                Console.Write("3. Введите средний балл: ");
                midball = Console.ReadLine();//читаем стринг
                double.TryParse(midball, out _midball);//преобразование в double
               //Проверка на ввод формата типа double и то, что число положительное
                while ((_midball < 0) || (!double.TryParse(midball, out _midball)))
                {
                    Console.WriteLine("Неверный формат ввода!");
                    Console.WriteLine("Повторите попытку ввода заново...");
                    Console.Write("3. Введите средний балл: ");
                    midball = Console.ReadLine();//читаем стринг
                    double.TryParse(midball, out _midball);//преобразование в double
                }
                WriteData();//Вызов WriteData
            }
             
        }

        public double Properties
        {
            get { return _midball; }
            //Проверка на успеваемость
            set
            {
                if (_midball >= 8)
                    Console.WriteLine("Ученик отличник!");
                else if (_midball < 4)
                    Console.WriteLine("Ученик неуспевающий!");
                else
                    Console.WriteLine("Ученик успевающий!");
            }
        }

        public void WriteData()
        {
                //Выводим данные, введенные с клавиатуры на экран
                Console.WriteLine("");
                Console.WriteLine("-Имя: " + _name);
                Console.WriteLine("-Возраст: " + _age.ToString());
                Console.WriteLine("-Средний балл: " + _midball.ToString());
                Console.WriteLine("");
                Properties = 0; // Вызываем свойство
                Console.WriteLine("");
        }
    }
}


Все таки мне не понятно как сделать так, чтобы у меня вначале запрашивало ввод данных указанное мной количество раз, а потом сразу все выводило.
Если где-то, что-то коряво написано просьба подсказать:rolleyes:
29K
30 мая 2011 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата: 61201

Все таки мне не понятно как сделать так, чтобы у меня вначале запрашивало ввод данных указанное мной количество раз, а потом сразу все выводило.
Если где-то, что-то коряво написано просьба подсказать:rolleyes:


Для того, чтобы выводить данные обо всех учениках после окончания ввода информации, необходимо эти данные (о каждом ученике) где-то хранить, например создать массивы для хранения имен всех учеников, их оценок и тп. Но так вообщет делать плохо. Лучше создать массив объектов класса Pupils (я бы сделал как-то так):

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

namespace ConsoleApplication1
{
    class Pupils
    {
        private int _age;
        private string _name;
        private double _midball;


        public Pupils()
        {
            //Объявляем переменные строками
            string age = string.Empty;
            string midball = string.Empty;
            string num = string.Empty;

            Console.Write("1. Введите имя: ");
                _name = Console.ReadLine();//читаем стринг

                Console.Write("2. Введите возраст: ");
                age = Console.ReadLine();
                int.TryParse(age, out _age);//преобразование в int
               //Проверка на ввод формата типа int и то, что число положительное
                while ((_age < 0) || (!int.TryParse(age, out _age)))
                {
                    Console.WriteLine("Неверный формат ввода!");
                    Console.WriteLine("Повторите попытку ввода заново...");
                    Console.Write("2. Введите возраст: ");
                    age = Console.ReadLine();//читаем стринг
                    int.TryParse(age, out _age);//преобразование в int
                }

                Console.Write("3. Введите средний балл: ");
                midball = Console.ReadLine();//читаем стринг
                double.TryParse(midball, out _midball);//преобразование в double
               //Проверка на ввод формата типа double и то, что число положительное
                while ((_midball < 0) || (!double.TryParse(midball, out _midball)))
                {
                    Console.WriteLine("Неверный формат ввода!");
                    Console.WriteLine("Повторите попытку ввода заново...");
                    Console.Write("3. Введите средний балл: ");
                    midball = Console.ReadLine();//читаем стринг
                    double.TryParse(midball, out _midball);//преобразование в double

                }
                       
        }
        //свойства для доступа к полям класса      
        public string Name
        {
            get { return _name;}
            set { _name = value;}
        }
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
        public double Midball
        {
            get { return _midball; }
            set { _midball = value; }
        }
        //свой-во возвращает строку, в зависимосьти от среднего бала
        public string Properties
        {
           
            get
            {
                if (_midball < 4)
                {
                    return  "Ученик неуспевающий!";
                }
                else if (_midball >= 8)
                {
                    return "Ученик отличник!";
                }
                else
                {
                    return "Ученик успевающий!";
                }
            }
           
        }

       
        public void WriteData()
        {
            Console.WriteLine("Имя ученика: " + _name.ToString());
            Console.WriteLine("Возраст ученика: " + _age.ToString());
            Console.WriteLine("Средний балл ученика: " + _midball.ToString());
            Console.WriteLine("Успеваемость: " + Properties.ToString());//Хочу тут юзать свойство
               
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите количество учеников: ");
            int n = Convert.ToInt32(Console.ReadLine());
            Pupils[] pupils = new Pupils[n]; //создаем массив объектов
            //ввод данных в массив
            for (int i = 0; i < n; i++)
            {
                pupils = new Pupils();
            }
            //вывод данных
            foreach (Pupils pupil in pupils)
            {
                pupil.WriteData();
            }
         
        }
    }
}

теперь можешь обращаться к каждому объекту в массиве по индексу, и изменять его свойства
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог