Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/55: Рейтинг темы: голосов - 55, средняя оценка - 4.82
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
.NET 4.x

Аргумент 1: не удаётся преобразовать из int в string

29.04.2019, 22:31. Показов 11690. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ссылки: Исходная тема [1] [2]

Очевидно, почему-то не работает Parse.

Также интересует момент про то, чтобы организовать построчный ввод, завершающийся Enter (знаю, есть такая штука, "поток данных" что ли).

Спасибо, теперь код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
 
class Matrix 
{
    static void Main()
    // 6.06 --> написать функцию: определитель 3-го пор-ка
    {
 
        Console.WriteLine("Квадратная матрица 3-го порядка...\n" +
                          "Вычисление определителя;\n");
 
        Console.WriteLine("Заполните числами от -500 до 500.\n");
 
        int[,] a = new int[2, 2];
 
    {   
        byte j, i = (byte) 0;
 
        for (; i < 3 ; i++ ) 
        {
            if ( i == 0 ) 
            {
                Console.WriteLine($"Введите 3 элемента строки № {i}\n" +
                                   "и нажмите Enter");
            }
 
            else 
            {
                Console.WriteLine($"Введите 3 элемента строки № {i}"); 
            }
                
 
                for ( j = 0 ; j < 3 ; j++ ) 
                    a[i,j] = int.Parse(Console.Read());
 
            Console.WriteLine();
        }
 
        Console.Clear();
 
        for ( i = 0 ; i < 3 ; i++ ) {
            for ( j = 0 ; j < 3 ; j++ )
                Console.Write($"{a[i,j]} ");
 
            Console.WriteLine();
        }
 
        Console.WriteLine();
 
    } // i, j уничтожаются...
 
    int deter = a[0,0] * ( a[1,1]*a[2,2] - a[2,1]*a[1,2] ) + 
    a[1,0] * ( a[2,1]*a[0,2] - a[0,1]*a[2,2] ) + a[2,0] * ( a[0,1]*a[1,2] - a[1,1]*a[0,2] );
 
    Console.Write($" Определитель = {deter}");
 
    Console.ReadKey();
        
    }
    
}


Кстати, тема - самое то для ЧаВо, обращайтесь
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2019, 22:31
Ответы с готовыми решениями:

Ошибка - не удается преобразовать из int в string
public void SaveInfo(string k, string d, string s) { int kp = int.Parse(k); int dp = int.Parse(d); ...

Аргумент не удается преобразовать из string в System.Collection.Generic.IEnumerable
подскажите как добавить в список новый элементvar partners = db.Partners .FullPartnerWithName() ...

Не удается преобразовать из int в string
private void button1_Click(object sender, EventArgs e) { MessageBox.Show(Environment.ProcessorCount); } ...

15
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
29.04.2019, 22:57
Лучший ответ Сообщение было отмечено number_118 как решение

Решение

Цитата Сообщение от number_118 Посмотреть сообщение
Очевидно, почему-то не работает Parse.
Метод Parse требует строкового (string) аргумента, а метод Console.Read() возвращает код клавиши.

https://docs.microsoft.com/ru-... mework-4.8

Для получения символа char надо использовать метод Convert.ToChar(). Потом приводить его к string.
1
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
30.04.2019, 01:15  [ТС]
Элд Хасп, мне их статья мало понравилась, о чём я им и написал (по-английски; хоть там и ru-ru).

Сначала нам там дают заковыристый код - явно не для начинающего Си-шарп-ника.

Потом пишут, мол, первый вызов Read() принимает всю строку - последующий по буквам. Я им так и написал, что вот где пример нужен (вместо того, что выше) (раздел Комментарии).

Цитата Сообщение от Микрософт
Важно: ReadLine() предпочтительнее.
Будто мы поняли, чем же убог Read()...
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
30.04.2019, 01:22
Цитата Сообщение от number_118 Посмотреть сообщение
Потом пишут, мол, первый вызов Read() принимает всю строку - последующий по буквам.
давайте читать вместе
Read Метод блокируется до ввода входных символов; она завершается при нажатии клавиши Enter ключ. Нажатие клавиши ВВОД добавляет последовательность завершения зависящая от платформы строка во входные данные (например, Windows присоединяет последовательность перевода строки возврат каретки). Последующие вызовы Read метод получения вашего входной один символ за раз. После получения последнего символа Read блокирует возврат еще раз, и цикл повторяется.
красным я выделил что вы придумали, синим как реально было сказано
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
30.04.2019, 01:27  [ТС]
КОП, просто Вы не хотите признать, что они не умеют чётко излагать. То, что Вы привели из источника (и выделили синим) - я своими словами всего лишь изложил.

Я уже понял:
1. Read() считывает код клавиши,
2. ReadLine() - строку,
3. ReadKey() - одну клавишу;

Только 1. считывает код, остальные сохраняют char либо string

0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
30.04.2019, 01:35
Цитата Сообщение от number_118 Посмотреть сообщение
просто Вы не хотите признать, что они не умеют чётко излагать
если в вашей вселенной слова блокируется и принимает синонимы, то да, не умеют

кроме того это машинный перевод, в этом случае он вполне корректный, но тем не менее читать офф доки в машинном переводе и перефразировать их.. зачем тогда вообще читать?

Цитата Сообщение от number_118 Посмотреть сообщение
я своими словами всего лишь изложил.
именно по этой причине здесь куча тем, где ответ дается в первом посте, а автор вопроса своими интерпретациями уходит в дебри и потом как ни странно возвращается к первому ответу
вот пример Возврат из блока catch
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
30.04.2019, 01:49  [ТС]
КОП,

Не по теме:

там наводишь курсор - оно даёт оригинал, его я и читал. "Subsequent" и многие другие слова я знаю.



Добавлено через 6 минут
P.S. Зачем в одну кучу в примерах валить обработку исключение и простейшее явление ввода данных?.. Думаю, надо начать со второго и не употреблять при этом первое. И где можно найти хоть один ресурс, где каждая взятая тема и любая информация искомая отвечала бы этому необходимому условию...

to КОП
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
30.04.2019, 01:55
Цитата Сообщение от number_118 Посмотреть сообщение
"Subsequent"
согласен, это может чуть сбить с толку. в комментарии не написано явно про возвращаемое значение. Но на то он собственно и комментарий - он лишь дополняет основную часть доки. Ну а в ней четко написано что возвращает метод, и это не строка)

Цитата Сообщение от number_118 Посмотреть сообщение
первый вызов Read() принимает всю строку
этой фразы там тоже нет, ни в англ, ни в русском, ни в какой либо двоякой форме. поэтому я позволил себе назвать это фантазией
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
30.04.2019, 01:56  [ТС]
Элд Хасп, нет, ReadLine() не терпит ввода именно строки - даёт FormatException; Read() и ReadKey(), насколько помню, просто не компиляться. Скриншот, пожалуй, не прилагаю. Хотя...

0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
30.04.2019, 02:00
Цитата Сообщение от number_118 Посмотреть сообщение
даёт FormatException;
C#
1
5 5 5
не является числом. После каждого числа надо жать энтер

Добавлено через 2 минуты
Цитата Сообщение от number_118 Посмотреть сообщение
Зачем в одну кучу в примерах валить обработку исключение и простейшее явление ввода данных?
тут пожалуй соглашусь.
хотя на стороне майков есть пара разумных доводов аля это документация, а не учебник для начинающих, и поэтому есть смысл показать полный функционал метода и его корректное применение
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
30.04.2019, 02:02  [ТС]
Цитата Сообщение от КОП Посмотреть сообщение
После каждого числа надо жать энтер
В Си, я помню, можно было сделать ввод всей строки, а не по одному числу. Но оно, кажется, не для массива было.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
30.04.2019, 02:10
Цитата Сообщение от number_118 Посмотреть сообщение
можно было сделать
можно сделать всё что угодно, просто код выглядит чуть иначе
C#
1
Console.ReadLine().Split(' ').Select(int.Parse).ToArray()
вернет сразу весь массив, если я не опечалатся.

Не по теме:

и на этом я спать

1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
30.04.2019, 09:06
Лучший ответ Сообщение было отмечено number_118 как решение

Решение

Цитата Сообщение от number_118 Посмотреть сообщение
нет, ReadLine() не терпит ввода именно строки - даёт FormatException; Read() и ReadKey(), насколько помню, просто не компиляться. Скриншот, пожалуй, не прилагаю. Хотя...
Вы так и не поняли как работает Read().

Для понимания не вкладывайте методы друг в друга - от этого пользы ни какой, только запутываете себя.
C#
33
34
35
36
37
38
39
40
                for ( j = 0 ; j < 3 ; j++ ) 
                {
                    int codeKey = Console.Read();
                    char charKey = Convert,ToChar(codeKey);
                    int digitKey = int.Parse(charKey.ToString());
                    Console.WriteLine($"Полученные: код = {codeKey}, символ = {charKey}, цифра = {digitKey}");
                    a[i,j] = digitKey;
                 }
Добавлено через 2 минуты
Но у Вас в целом какой-то непонятный код, что Вы в нём хотели реализовать - я так и не понял. Ввод по одной цифре (не числу) в элементы массива?

Добавлено через 2 минуты
Цитата Сообщение от КОП Посмотреть сообщение
вернет сразу весь массив, если я не опечалатся.
Уточню.
Не весь массив, а одну строку. Весь массив, в данном, случае - это многомерный массив.

Добавлено через 9 минут
Цитата Сообщение от number_118 Посмотреть сообщение
теперь код:
  • В комментариях у Вас написано Квадратная матрица 3-го порядка, а создаёте Вы матрицу из двух столбцов и двух строк int[,] a = new int[2, 2];
  • Все Ваши циклы будут давать ошибку выхода за диапазон. Массив по всем измерениям имеет индексы 0 и 1, а циклы у Вас перебирают 0, 1, 2, На двойке будет вылетать исключение.
  • Зачем Вы используете тип byte byte j, i = (byte) 0;? В C# основной целочисленный тип - это int. Если нет каких-то требований ограничивающих его применение, то всегда надо использовать его. Никакой экономии, скорости или других преимуществ из-за использования byte Вы не получите. Напротив, использование других типов может привести к ненужным (явным или неявным) преобразованиям типов.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
30.04.2019, 11:01
number_118, вот метод для ввода с консоли квадратной матрицы с возможностью ограничения по диапазону
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
        /// <summary>Метод ввода с консоли целочисленной матрицы</summary>
        /// <param name="countRow">Количество строк</param>
        /// <param name="countCol">Количество колонок</param>
        /// <param name="rangeMin">Ограничение диапазона снизу</param>
        /// <param name="rangeMax">Ограничение диапазона сверху</param>
        /// <returns><see langword="null"/> - если праметры некорректны</returns>
        public static int[,] ConsoleReadIntMatrix(int countRow, int countCol, int rangeMin = int.MinValue, int rangeMax = int.MaxValue)
        {
            //https://www.cyberforum.ru/csharp-beginners/thread2445275.html
 
            if (countRow < 1 || countCol < 1 || rangeMin > rangeMax)
                return null;
 
            int[,] matrix = new int[countRow, countCol];
            bool correct = false;
 
            do
            {
                Console.WriteLine("Введите элементы целочисленной матрицы.\r\n" +
                    "Элементы в строке разделяются пробелами, строки разделяются знаком \"/\"");
 
                string input = Console.ReadLine(); // Считывание с консоли
 
                string[] rowsStr = input.Split('/'); // Получение массива строк
                if (rowsStr.Length == countRow) // Проверка длины массива строк
                {
                    int row = 0;
                    for (; row < countRow; row++)
                    {
                        int?[] itemsStr = rowsStr[row] // Получение массива элементов строки
                            .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                            .Select(str => int.TryParse(str, out int _tmp) && _tmp >= rangeMin && _tmp <= rangeMax ? _tmp : (int?)null)
                            .ToArray();
                        if (itemsStr.Length != countCol || !itemsStr.All(_item => _item != null)) // Проверка количества элементов строки и правильности ввода
                            break;
                        for (int col = 0; col < countCol; col++)
                            matrix[row, col] = itemsStr[col].Value;
                    }
                    if (row == countRow)
                        correct = true;
                }
                if (!correct)
                    Console.WriteLine("Ошибочный ввод! Повторите!");
 
            } while (!correct);
            return matrix;
        }
Пример использования
C#
1
            int[,] myMatrix = ConsoleReadIntMatrix(3, 3, -500, 500);
1
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
30.04.2019, 17:31  [ТС]
Элд Хасп, свою задачу решил, пока методом попроще: ввод-Enter, ввод-Enter...

Ваш код из 13-го сообщения запустил - получил такое [эпитет]:



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
 
class Figas 
 
{
    static void Main()
    {
        
        Console.Write("Введите код: ");
            int codeKey = Console.Read();
            char charKey = Convert.ToChar(codeKey);
            int digitKey = int.Parse(charKey.ToString());
            Console.WriteLine($"Полученные: код = {codeKey}, символ = {charKey}, цифра = {digitKey}");
 
        Console.ReadKey();
    }
}
Спасибо!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,138
Записей в блоге: 2
30.04.2019, 18:18
Цитата Сообщение от number_118 Посмотреть сообщение
Ваш код из 13-го сообщения запустил - получил такое [эпитет]:
Да, так и должно выводить.
Выводит код символа, сам символ и символ приведённый к int. Последние два на консоли, для цифровых клавиш, будут одинаковы. Для не цифровых - будет исключение на конвертации в int.

Это код для того, чтобы Вы могли понять что возвращают методы и как эти типы надо друг в друга преобразовывать.

Цитата Сообщение от number_118 Посмотреть сообщение
свою задачу решил, пока методом попроще: ввод-Enter, ввод-Enter...
Используйте код из поста #14.
Там же метод для полноценного ввода матрицы с консоли и пример как его использовать.
Всё очень просто.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2019, 18:18
Помогаю со студенческими работами здесь

Не удается неявно преобразовать тип string в int
Всем привет! Помогите пожалуйста разобраться, почему тип textBox не изменяется на int public partial class Nwork : Form { ...

Не удается неявно преобразовать тип string в System.Collection.Generic.Queue<int>
Такая во ошибка не удаеться неявно преобразовать тип string в System.Collection.Generic.Queue&lt;int&gt; public static void Counter(int...

Аргумент 1: не удается преобразовать из "System.IntPtr" в "int"
Ошибка CS1503 Аргумент 1: не удается преобразовать из &quot;System.IntPtr&quot; в &quot;int&quot;. Есть условие которое ругается на IntPTR и адресс ...

Ошибка CS1503 Аргумент 1: не удается преобразовать из "string" в "char"
Ошибку как исправить? Вот такие ошибки: Ошибка CS1503 Аргумент 1: не удается преобразовать из &quot;string&quot; в...

Невозможно преобразовать аргумент 1 из "int" в "System::String ^"
Есть строка this-&gt;label4-&gt;Text = s; пишет невозможно преобразовать аргумент 1 из &quot;int&quot; в &quot;System::String ^&quot;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru