Объясните строку int a = int.Parse(Console.ReadLine()); - C#
Формулировка задачи:
int a = int.Parse(Console.ReadLine());
Console.WriteLine("количество совершенных операций = {0}", j);Решение задачи: «Объясните строку int a = int.Parse(Console.ReadLine());»
textual
Листинг программы
public enum EOrder
{
Less = 1,
Greater,
Equals
} ;
public interface IDriver
{
int Left { get; }
int Rigth { get; }
EOrder Result { get; }
int Current { get; set; }
void Complete(bool isFound, int opCount);
}
internal class ConsoleDriver : IDriver
{
#region Implementation of IDriver
public int Left
{
get { return Read("Введите целое число с которого начать отсчет: "); }
}
public int Rigth
{
get { return Read("Введите целое число которым закончить отсчет: "); }
}
public EOrder Result
{
get { return ReadResult(); }
}
public int Current
{
get;
set;
}
public void Complete(bool isFound, int opCnt)
{
if (isFound)
{
Console.WriteLine("ЧИСЛО ОТГАДАНО! С {0} ПОПЫТКИ", opCnt);
}
else
{
Console.WriteLine("Где-то Вы солгали, сударь или сударыня!");
}
Console.WriteLine("The end.");
}
#endregion
private EOrder ReadResult()
{
Console.WriteLine("это число {0}?", Current);
Console.WriteLine("1 - меньше ");
Console.WriteLine("2 - больше ");
Console.WriteLine("3 - равно ");
do
{
int ans = Read("Введите ответ от 1 до 3: ");
if (ans < 1 || ans > 3)
{
PrintError("Чило может быть больше(2), меньше(1) или равно(3) загадонному!");
continue;
}
return (EOrder)ans;
}
while (true);
}
private static int Read(string invitation)
{
do
{
Console.Write(invitation);
string str = Console.ReadLine();
if (string.IsNullOrEmpty(str))
{
PrintError("неверный формат числа!");
continue;
}
int res;
if (int.TryParse(str, out res))
{
return res;
}
PrintError("неверный формат числа!");
}
while (true);
}
private static void PrintError(string message)
{
Console.WriteLine();
Console.WriteLine("**************ОШИБКА!*******************");
Console.WriteLine(message);
Console.WriteLine("****************************************");
Console.WriteLine();
}
}
class Fortuneteller : IEnumerator<int>, IEnumerable<int>
{
private readonly IDriver _driver;
private int _left;
private int _right;
private bool _isFound;
private int _op;
public Fortuneteller(IDriver driver)
{
_driver = driver;
_left = _driver.Left - 1;
_right = _driver.Rigth + 1;
_driver.Current = int.MinValue;
}
private void SetBounds(EOrder order)
{
switch (order)
{
case EOrder.Less:
_right = _driver.Current;
break;
case EOrder.Greater:
_left = _driver.Current;
break;
case EOrder.Equals:
_left = _right = _driver.Current;
_isFound = true;
break;
}
}
private int GetNext()
{
return (_left + _right) / 2;
}
#region Implementation of IDisposable
public void Dispose()
{
_driver.Complete(_isFound, _op);
}
#endregion
#region Implementation of IEnumerator
public bool MoveNext()
{
if (_isFound || (_left >= _right))
return false;
int t = GetNext();
if (t == _driver.Current)
return false;
_driver.Current = t;
SetBounds(_driver.Result);
++_op;
return true;
}
public void Reset() { }
public int Current
{
get { return _driver.Current; }
}
object IEnumerator.Current
{
get { return Current; }
}
#endregion
#region Implementation of IEnumerable
public IEnumerator<int> GetEnumerator()
{
return this;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
}