none
Деление на ноль выдаёт "?" вместо "infinity" RRS feed

  • Вопрос

  • Почему при выполнении следующего кода:

    double a = 1.0, b = 0;
                Console.WriteLine(a / b);
                double d = a / b;
                Console.WriteLine(d);

    программа выдаёт знак "?" вместо "infinity"?

    26 марта 2016 г. 12:41

Ответы

  • Видимо, кодовая страница консоли не включает в себя символ , который данный код пытается вывести, поэтому вместо него выводится знак вопроса. Добавьте:
    Console.OutputEncoding=System.Text.Encoding.Unicode;
    перед выводом.
    26 марта 2016 г. 14:29
  • Кодовая страница консоли по умолчанию зависит от системной настройки Язык программ, не поддерживающих Юникод. Разные кодовые страницы имеют разный набор символов. Кодовая страница для русского языка должна включать в себя кириллицу, поэтому в ней гораздо меньше места для дополнительных символов.

    P.S. IMHO, не стоит в 2016-ом году писать программу, которая не поддерживает Юникод, их и так вполне достаточно.

    • Помечено в качестве ответа Развитёр 11 апреля 2016 г. 10:35
    29 марта 2016 г. 13:03

Все ответы

  • Видимо, кодовая страница консоли не включает в себя символ , который данный код пытается вывести, поэтому вместо него выводится знак вопроса. Добавьте:
    Console.OutputEncoding=System.Text.Encoding.Unicode;
    перед выводом.
    26 марта 2016 г. 14:29
  • Спасибо за совет! Помогло! Интересно, почему кодовая страница моей консоли не включает в себя символ , который данный код пытается вывести?
    26 марта 2016 г. 18:57
  • Такая же проблема и при выводе результата следующего кода:
    Console.Write("Номинал купюры = ");
    int a = int.Parse(Console.ReadLine());
    Console.Write("Количество купюр = ");
    int b = int.Parse(Console.ReadLine());
    int c = a + b;
    Console.WriteLine("Сумма денег = {0:C2}", c);
    Вместо символа валюты "Р" выводит знак вопроса, но если вставить перед выводом Console.OutputEncoding=System.Text.Encoding.Unicode; то всё выводит как требуется. Что нужно сделать чтобы не добавлять всегда Console.OutputEncoding=System.Text.Encoding.Unicode; перед выводом?
    28 марта 2016 г. 19:20
  • Вы видимо незнакомы с кодовыми страницами и концепцией Юникод...

    Дело в том что кодовые страницы ANSI работают с 8 битными кодами символа что допускает не более 256 символов одновременно (причем половина из них фиксирована). Поскольку общее число символов исчисляется десятками тысяч то очевидно что при использовании кодовых страниц отобразить можно только очень малую долю из них. Поэтому то специальные символы и не отображаются в вашем случае.

    Для решения это проблемы придуман Юникод который позволяет закодировать и отображать десятки тысяч символов.

    Таким образом вам просто всегда использовать Юникод всегда добавляя указанный выше код перед выводом (один раз).

    Если не хотите добавлять то никогда не отображайте символы которых нет в текущей кодовой странице.  


    This posting is provided "AS IS" with no warranties, and confers no rights.

    29 марта 2016 г. 6:16
    Модератор
  • Но почему тогда на другом компьютере символы выводятся без добавления Console.OutputEncoding=System.Text.Encoding.Unicode;? Может где-то в настройках VS нужно что-то изменить?
    29 марта 2016 г. 12:29
  • Кодовая страница консоли по умолчанию зависит от системной настройки Язык программ, не поддерживающих Юникод. Разные кодовые страницы имеют разный набор символов. Кодовая страница для русского языка должна включать в себя кириллицу, поэтому в ней гораздо меньше места для дополнительных символов.

    P.S. IMHO, не стоит в 2016-ом году писать программу, которая не поддерживает Юникод, их и так вполне достаточно.

    • Помечено в качестве ответа Развитёр 11 апреля 2016 г. 10:35
    29 марта 2016 г. 13:03
  • P.S. IMHO, не стоит в 2016-ом году писать программу, которая не поддерживает Юникод, их и так вполне достаточно.

    Полностью поддерживаю! Однако, как бы эту мысль донести до Microsoft, чтобы они наконец-то сделали нормальную консоль?
    31 марта 2016 г. 14:24