Проблема с внесением данных в массив (C#)
Пишу программу, которая должна получать от пользователя строку (цифры и пробелы), отделять цифры от пробелов и вносить это в отдельный массив (int[]).
Дело в том, что при внесении данных в новый массив, туда залетают непонятные мне цифры (не те, которые указывает пользователь).
Просьба пояснить, почему происходит именно так, и каким образом это можно пофиксить.
Вывод:
Введите строку с цифрами, разделенную пробелами: 1 2
49 0
static void Main(string[] args)
{
int number = 0;
Console.Write("Введите строку с цифрами, разделенную пробелами: ");
string str = Console.ReadLine();
char[] array = str.ToCharArray();
for (int i = 0; i < array.Length; i++)
{
if (Convert.ToString(array[i]) == " ")
{
continue;
}
else
{
number++;
}
}
int[] array_int = new int[number];
for (int i = 0; i < array_int.Length; i++)
{
if (Convert.ToString(array[i]) == " ")
{
continue;
}
else
{
array_int[i] = Convert.ToInt32(array[i]);
}
}
for (int i = 0; i < array_int.Length; i++)
{
Console.WriteLine(array_int[i]);
}
}
Ответы (1 шт):
У вас в новый массив попадают коды символов - так работает Convert.ToInt32() с аргументом Char.
Одно решение как это починить - вычесть код символа
0из них (то есть отнятьConvert.ToInt32('0')).Другой вариант - преобразовывать
array[i]изCharвStringи тогдаConvert.ToInt32()с аргументом в виде строки отработает так как вы хотите.
Документация на Convert.ToInt32
Update: У вас ещё и с нумерацией во втором цикле проблемы. Там тоже надо учитывать, что вы пробелы пропускаете, я исправил:
int[] array_int = new int[number];
number = 0; // добавил
for (int i = 0; i < array.Length; i++)
{
if (Convert.ToString(array[i]) == " ")
{
continue;
}
else
{
array_int[number] = Convert.ToInt32(Convert.ToString(array[i])); // исправил
number++; // добавил
}
}