C # возвращает совершенно не связанное и, казалось бы, случайное целое число? - PullRequest
0 голосов
/ 05 ноября 2018

В настоящее время я начинающий C #, но у меня возникла эта проблема, и как пользователь Python эта ошибка не имеет для меня никакого смысла. Я пытался найти исправление, но я не знаю, что искать или как описать ошибку, поэтому, пожалуйста, помогите!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace testin
{
    class Program
    {
        static void Main(string[] args)
        {
            PrintState();
            CalculateAge();
            EzMaths();
            //Here I call the procedure which is declared later on
            Console.ReadLine();
        }
        static void PrintState()
        {
            /*Here I write the procedure of 'PrintState',
             * or print statement. The program will print "hey world"
             * to the console as a result. */
            Console.WriteLine("Hey world");
        }

        static void EzMaths()
        {
            Console.WriteLine("Enter the first number ");
            Console.Write("> ");
            int num1 = Console.Read();
            Console.WriteLine("Enter the second number ");
            Console.Write("> ");
            int num2 = Console.Read();
            int total = (num1 + num2);
            Console.WriteLine(total);
        }


        static void CalculateAge()
        {
            Console.WriteLine("Enter your year of birth ");
            Console.Write("> ");
            int date = Console.Read();
            int age = (2018 - date);
            Console.Write("You are " + (age));
            Console.ReadLine();


        }


    }
}

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Console.Read(); читает следующий символ, но как его int представление. Вам нужно будет использовать Console.ReadLine();, но теперь вы столкнулись с другой проблемой: Console.ReadLine(); возвращает строку, а не int, поэтому теперь вам нужно конвертировать ее. В .NET World вы бы сделали это так:

string userInput = Console.ReadLine();
int userInputNumber = Convert.ToInt32(userInput);

Это небезопасно, поскольку пользователь может ввести что-то, что не является числом, и это приведет к аварийному завершению программы. Конечно, если вы только начинаете и делаете приложение «Hello World», это, вероятно, не самая большая проблема.
В любом случае я выложу лучшую версию, если вам интересно:

string userInput = Console.ReadLine();
int userInputNumber;
if (int.TryParse(userInput, out userInputNumber))
{
    // Do code here with userInputNumber as your number
}

А в C # (как и в любом современном языке) у нас есть Syntatic Sugar , чтобы сделать его короче, но труднее читать:

if (int.TryParse(Console.ReadLine(), out int userInputNumber))
{
    //Do code here
}
0 голосов
/ 05 ноября 2018

вам нужно использовать console.ReadLine () вместо console.Read () в вашей функции CalculateAge. обратитесь к этому ответу, чтобы понять разницу между Console.Read и console.ReadLine: Разница между Console.Read () и Console.ReadLine ()?

Тем не менее, я бы посоветовал вам также добавить tryParse, чтобы проверить, является ли введенное значение целым числом, прежде чем преобразовать его в int

как то так:

    static void CalculateAge()
    {
        Console.WriteLine("Enter your year of birth ");
        Console.Write("> ");
        string input = Console.ReadLine();
        int date = 2018;
        Int32.TryParse(input, out date);
        int age = (2018 - date);
        Console.Write("You are " + (age));
        Console.ReadLine();
    }

у вас может быть другая реализация, если вы не хотите, чтобы она имела значение по умолчанию 2018. Например, добавьте цикл while, а tryParse! = False, затем продолжайте запрашивать ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...