Почему начальное значение «я» всегда 49

1

Это мой код С# для печати таблицы умножения

using System;
namespace MultiplicationTable
{
    class Program
    {
        static void Main(string[] args)
        {
            dynamic value;
            int i;            
            value = "123456789";
            int num = Convert.ToInt32(Console.ReadLine());
            foreach (char name in value)
            {
                i = Convert.ToInt32(name);
                Console.WriteLine("{0} x {1} = {2}",i,num,i*num);
            }
            Console.ReadKey();
            }
        }
    }

когда я запускаю программу, значение i начинается с 49. Выход для входа 6 Изображение 174551

Теги:

3 ответа

12
Лучший ответ

Кодовая точка Unicode для цифры 1 равна 49. Convert.ToInt32() с аргументом char возвращает кодовую точку указанного аргумента.

Быстрое исправление для этого, если ваши значения умножения должны быть в строке, состоит в том, чтобы преобразовать каждую цифру в строку перед преобразованием в int:

i = Convert.ToInt32(name.ToString());

Но если вы выполняете умножение на ряд чисел, вы, вероятно, лучше с помощью массива int. Если вы вычисляете числа, нет никаких причин хранить их в строке.

  • 2
    name - '0' тоже работает
11

Поскольку значение ASCII символа 1 равно 49

Проверь это:

Изображение 174551

  • 0
    s/ASCII/UNICODE/ . Это C #, о котором мы говорим :)
  • 1
    @ FrédéricHamidi, это на самом деле не менее верно, это просто более конкретно
Показать ещё 1 комментарий
2

Проверьте выходной сигнал ниже

Console.WriteLine(Convert.ToInt32('1')); //49
Console.WriteLine(Convert.ToInt32("1")); //1

Чтобы исправить вашу программу, сначала преобразуйте символ в строку

i = Convert.ToInt32(Convert.ToString(name));

Или просто

i = Convert.ToInt32(name) - 48;
  • 1
    все типы в C # имеют встроенный метод .ToString() , нет необходимости явно писать Convert.ToString(name) , достаточно name.ToString()
  • 0
    Да, они одинаковы. Учитывая, что OP использует Convert.ToIn32, Convert.ToString дает больше подсказок о разнице типов между строкой и символом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню