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();
}
Вывод данных в C# после цикла For
Как это сделать, либо какую функцию использовать.
И еще вопрос, как в мейне вызвать свойство реализованное в моем классе. При вызове оно мне почему-то вызывало переменную _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("");
}
}
}
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("");
}
}
}
Код:
после ввода данных вызывается функция 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();
}
{
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("");
}
}
{
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("");
}
}
Во-первых, переменным нужно дать нормальные названия: имя - name, возраст - age, и т.д.
Во-вторых, где проверка и обработка результатов методов TryParse ?
В-третьих, для имени выделена всего одна буква - char.
В-четвёртых, условие в свойстве желательно переписать с использованием else if (или switch).
Хочу понять как их лучше использовать.
2.В смысле проверка методов TryParse, если можете поясните.
3.Про чар понял, исправляюсь
4.
Код:
if ((_c >= 4) & (_c < 8))
Console.WriteLine("Ученик успевающий!");
if (_c >= 8)
Console.WriteLine("Ученик отличник!");
else
Console.WriteLineI("Ученик не успевающий!");
Console.WriteLine("Ученик успевающий!");
if (_c >= 8)
Console.WriteLine("Ученик отличник!");
else
Console.WriteLineI("Ученик не успевающий!");
Таким образом оно неверно срабатывает. Потому не знаю как по другому.
По коменту енота, увы ничего правильно не сработало. Если добавить еще один цикл, то оно вообще как то неправильно выводит. С свойством так же, не желает возвращать строки
да согласен, чет я тупанул. У тебя данные при вводе ни куда не сохраняются, то есть ты ввел имя, возраст, балл для первого ученика, потом вводишь для второго, и получается что переменным которые хранят инфу о первом ученике, ты присваиваешь новые значения, и так далее. В результате у тебя в переменных будет информация только о последнем ученике.
Если TryParse вернёт false, то последующий код не имеет смысла: ведь в переменной нет никакого значения (вернее, будет 0). Логичней всего требовать повторный ввод от пользователя, пока он не введёт правильные данные:
Код:
do
{
Console.Write("Введите количество учеников: ");
n = Console.ReadLine();
} while (!int.TryParse(n, out _n));
{
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("Ученик успевающий!");
Console.WriteLine("Ученик отличник!");
else if (_c < 4)
Console.WriteLine("Ученик не успевающий!");
else
Console.WriteLine("Ученик успевающий!");
И, кстати, не путайте логическое и условное И! Оператор & и оператор && - разные вещи!
Задавать начальное значение строк в таком виде тоже не совсем правильно:
Код:
string a = " ";
Пробел в дальнейшем не используется. Поэтому лучше так:
Код:
string a = string.Empty;
Код:
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("");
}
}
}
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:
Цитата: 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();
}
}
}
}
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();
}
}
}
}
теперь можешь обращаться к каждому объекту в массиве по индексу, и изменять его свойства