Это мой код С# для печати таблицы умножения
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
Кодовая точка Unicode для цифры 1 равна 49. Convert.ToInt32()
с аргументом char
возвращает кодовую точку указанного аргумента.
Быстрое исправление для этого, если ваши значения умножения должны быть в строке, состоит в том, чтобы преобразовать каждую цифру в строку перед преобразованием в int:
i = Convert.ToInt32(name.ToString());
Но если вы выполняете умножение на ряд чисел, вы, вероятно, лучше с помощью массива int. Если вы вычисляете числа, нет никаких причин хранить их в строке.
Поскольку значение ASCII символа 1
равно 49
Проверь это:
s/ASCII/UNICODE/
. Это C #, о котором мы говорим :)
Проверьте выходной сигнал ниже
Console.WriteLine(Convert.ToInt32('1')); //49
Console.WriteLine(Convert.ToInt32("1")); //1
Чтобы исправить вашу программу, сначала преобразуйте символ в строку
i = Convert.ToInt32(Convert.ToString(name));
Или просто
i = Convert.ToInt32(name) - 48;
.ToString()
, нет необходимости явно писать Convert.ToString(name)
, достаточно name.ToString()