Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
4 / 4 / 1
Регистрация: 05.10.2012
Сообщений: 47

Возврат методом различных типов данных

23.06.2015, 23:24. Показов 1526. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте,


ребята, как научить мой "калькулятор" понимать строку ввода типа "2+2" или к примеру "10/2" когда я ввожу в консоль, выдаётся ошибка. Код ниже:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace _07Metods02
{
    class Program
    {
        static double Add(double a, double b)
        {
                return a + b;
        }
        static double Sub(double a, double b)
        {
                return a - b;
        }
        static double Mul(double a, double b)
        {
                return a * b;
        }
        static double Div(double a, double b)
        {
                return a / b;
        }
        static void Main(string[] args)
        {
            double a, b;
            char x;
            Console.WriteLine("Пожалуста введите 2 числа");
            a = double.Parse(Console.ReadLine());
            x = char.Parse(Console.ReadLine());
            b = double.Parse(Console.ReadLine());
            if (b == 0)
            {
                Console.WriteLine("Ошибка! На ноль делить нельзя!");
            }
                switch (x)
                {
                    case '+':
                        Console.WriteLine("Сумма этих двух чисел {0:0.00}", Add(a, b));
                        break;
                    case '-':
                        Console.WriteLine("Разница этих двух чисел {0:0.00}", Sub(a, b));
                        break;
                    case '*':
                        Console.WriteLine("Произведение этих двух чисел {0:0.00}", Mul(a, b));
                        break;
                    case '/':
                        Console.WriteLine("Деление этих двух чисел {0:0.00}", Div(a, b));
                        break;
                }
            Console.ReadKey();
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2015, 23:24
Ответы с готовыми решениями:

Возврат разных типов данных в методе, обобщение в классе
Столкнулся с проблемой. Пытаюсь создать класс, метод которого будет возвращать объекты разных типов, с использованием обобщений. Не могу...

Свертка экспериментальных данных различных типов
Ребят, есть может у кого какие, наработки, сбросьте буду признателен.

Ввод, преобразование и форматированный вывод различных типов данных
Напишите программу, которая: 1. Вводит все числовые типы данных (допускается исключение decimal), ожидая окончание ввода числа до...

2
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
23.06.2015, 23:42
Конечно выдается если парсить в double строку содержащую что-то кроме цифр. Если хотите реально написать калькулятор который разбирает входные строки надо писать свой парсер, который будет разбивать строку на лексемы, составлять дерево выражений и на основе этого дерева производить вычисления. Изучите тему лексического анализа поподробнее и вам станет ясно как действовать.Это не очень сложно
0
979 / 874 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
24.06.2015, 00:01
В данном примитивном случае с одной операцией можно вставить вот такой костыль:
C#
1
2
3
4
5
6
7
            double a, b;
            char x = ' ';
            string str = Console.ReadLine();
            foreach (var ch in str) { if (!Char.IsDigit(ch)) { x=ch; } }
            string[] digits = str.Split(new char[1]{x}, StringSplitOptions.RemoveEmptyEntries);
            a = Convert.ToInt32(digits[0]);
            b = Convert.ToInt32(digits[1]);
Но по уму-делать надо с разбором строк с любым количеством операций, как уже сказали выше, кроме того надо сделать обработку всех исключений. Поищите на форуме, тема миллион раз подымалась.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.06.2015, 00:01
Помогаю со студенческими работами здесь

Чтение и запись типов, массив типов и List<> данных в файл
Здравствуйте Подскажите способ записи и чтения любых типов данных (не компонентов) Например это: string в котором текст может быть...

Исследование сортировок различных типов
Помогите=( пожалуйста... Выявить, как в процентном соотношении отличается эффективность работы алгоритма сортировки методом поиска...

Обработка различных типов исключений
Здравствуйте, вопрос собственно касательно исключений. Есть например 2 исключения и например при выбрасывании любого из исключений...

Функция для печати массивов различных типов.
Добрый день. Вопрос в следующем, задание сделать функцию которая будет печатать массивы различных типов. Одномерные двумерные и...

Класс-контейнер для хранения различных типов
Здравствуйте, товарищи!!! Подскажите, есть ли класс-контейнер для одновременного хранения в нем различных типов? Как я понял...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru