Console — Console Application C#


Содержание

Console — Console Application C#

Для вывода информации на консоль мы уже использовали встроенный метод Console.WriteLine . То есть, если мы хотим вывести некоторую информацию на консоль, то нам надо передать ее в метод Console.WriteLine:

Нередко возникает необходимость вывести на консоль в одной строке значения сразу нескольких переменных. В этом случае мы можем использовать прием, который называется интерполяцией:

Для встраивания отдельных значений в выводимую на консоль строку используются фигурные скобки, в которые заключается встраиваемое значение. Это можем значение переменной ( ) или более сложное выражение (например, операция сложения <4 + 7>). А перед всей строкой ставится знак доллара $.

При выводе на консоль вместо помещенных в фигурные скобки выражений будут выводиться их значения:

Есть другой способ вывода на консоль сразу нескольких значений:

Этот способ подразумевает, что первый параметр в методе Console.WriteLine представляет выводимую строку («Имя: <0>Возраст: <2>Рост: <1>м»). Все последующие параметры представляют значения, которые могут быть встроенны в эту строку (name, height, age). При этом важен порядок подобных параметров. Например, в данном случае вначале идет name, потом height и потом age. Поэтому у name будет представлять параметр с номером 0 (нумерация начинается с нуля), height имеет номер 1, а age — номер 2. Поэтому в строке «Имя: <0>Возраст: <2>Рост: <1>м» на место плейсхолдеров <0>, <2>, <1>будут вставляться значения соответствующих параметров.

Кроме Console.WriteLine() можно также использовать метод Console.Write() , он работает точно так же за тем исключением, что не осуществляет переход на следующую строку.

Консольный ввод

Кроме вывода информации на консоль мы можем получать информацию с консоли. Для этого предназначен метод Console.ReadLine() . Он позволяет получить введенную строку.

В данном случае все, что вводит пользователь, с помощью метода Console.ReadLine передается в переменную name.

Пример работы программы:

Таким образом мы можем вводить информацию через консоль. Однако минусом этого метода является то, что Console.ReadLine считывает информацию именно в виде строки. Поэтому мы можем по умолчанию присвоить ее только переменной типа string. Как нам быть, если, допустим, мы хотим ввести возраст в переменную типа int или другую информацию в переменные типа double или decimal? По умолчанию платформа .NET предоставляет ряд методов, которые позволяют преобразовать различные значения к типам int, double и т.д. Некоторые из этих методов:

Convert.ToInt32() (преобразует к типу int)

Convert.ToDouble() (преобразует к типу double)

Convert.ToDecimal() (преобразует к типу decimal)

Пример ввода значений:

При вводе важно учитывать текущую операционную систему. В одних культурах разделителем между целой и дробной частью является точка (США, Великобритания. ), в других — запятая (Россия, Германия. ). Например, если текущая ОС — русскоязычная, значит, надо вводить дробные числа с разделителем запятой. Если локализация англоязычная, значит, разделителем целой и дробной части при вводе будет точка.

C# Console Application Example

C# Console Application Example: चूंकि, C# में विभिन्न प्रकार के Input/Output Operations को Perform करने से सम्बंधित सारी Functionalities को System Namespace की Console नाम की Class द्वारा Handle किया जाता है।

इसलिए इससे पहले कि हम आगे बढें, हमारे लिए InputOutput से सम्बंधित कुछ Methods को ठीक तरह से समझ लेना उपयोगी होगा, ताकि विभिन्न प्रकार के C# Programming Concepts को समझने के लिए हम आसानी से Input/Output Related Functionalities को Use करते हुए उपयोगी Programs बना सकें।

.NET Framework में Defined System.Console Class भी एक काफी बडी Class है, जिसमें Console IO से सम्बंधित बहुत सारे Data Members व Methods को Define किया गया है और इन PropertiesMethods को Use करके हम एक Good Looking व Powerful Console Application Develop कर सकते हैं।

C# की इस Console Class में Data Reading के लिए तीन व Writing के लिए 2 Methods को Define किया गया है, जो कि निम्नानुसार हैं:

Read() ReadKey() ReadLine()

Write() WriteLine()

इस Class में Input से सम्बंधित केवल ReadKey() Method को Override किया गया है, जबकि Output से सम्बंधित दोनों Write()WriteLine() Methods को कई तरह के Data को Output करने के लिए कई तरह से Override किया गया है।

.NET Framework की विभिन्न Assemblies और उन Assemblies में Compiled विभिन्न Namespaces और हर Namespace में Defined विभिन्न Types की Detailed Information प्राप्त करने के लिए हम Visual Studio या C# Express Edition के Object Browser Utility का प्रयोग कर सकते हैं, जिसे IDE के View Menu में “Object Browser” नाम के Option को Click करके Activate किया जा सकता है।

जैसाकि निम्न चित्र द्वारा हम समझ सकते हैं कि Left Side में हमें Currently Selected mscorlib.dll Assembly में Exist विभिन्न Types दिखाई दे रहे हैं, जबकि Left Side में Currently Selected Console Class के सभी Members की List को हम Right Side में देख सकते हैं।


साथ ही इस Right Side में दिखाई देने वाले Members की List में हम जिस Member को Select करते हैं, उस Member से सम्बंधित Specific Description जैसे कि Syntax, Summary, Return ValueExceptions आदि की जानकारी प्राप्त हो जाती है।

जैसाकि हमने कहा कि Write()WriteLine() दोनों Methods के कई Overloaded Variations हैं, जिन्हें हम उपरोक्त चित्र में दिखाए अनुसार Object Browser द्वारा देख सकते हैं। लेकिन फिर भी इन दोनों Methods में केवल एक ही मूल अन्तर है और वह ये है कि Write() Method Use करने पर Method के Execute होने के बाद C# Compiler Cursor को New Line में Move नहीं करताए जबकि WriteLine() Method को Use करने पर, Method के Execute होने के बाद C# Compiler Cursor को New Line में Move नहीं कर देता है।

यानी Write() Method Automatically New Line नहीं लेता बल्कि यदि Output Show करते समय New Line की जरूरत हो, तो New Line लेने के लिए हमें “\n” Backslash Character Constant का प्रयोग करना जरूरी होता है। जबकि WriteLine() Method को Use करने पर जैसे ही ये Method Execute होता है, इस Method के बाद लिखा गया Content, Output में अगली Line में ही Display होता है।

इसी तरह से यदि हमें Keyboard से केवल एक Character को Read करना हो, तो हम Read() या ReadKey() Method को Use करते हैं। लेकिन यदि हमें Keyboard से पूरी Line को यानी जब तक User Enter Key Press नहीं करता तब तक लिखे गए सभी Characters को Read करना हो, तो हम ReadLine() Method को Use करते हैं। चलिए, एक और उदाहरण Program द्वारा इन दोनों Methods की Working व Use को समझने की कोशिश करते हैं।

जब इस Program को Compile करके Run किया जाता है, तो CLR सबसे पहले Main() Method पर पहुंचता है, जहां उसे निम्न Statement मिलता है:

Console.Write(“Enter your Name:”);

इस Statement में हमने Write() Method को Use किया है, इसलिए इस Method के Execute होने के बाद Screen पर निम्नानुसार एक Message Display होता है:

Enter your Name:

लेकिन Cursor अगली Line में Move नहीं होता। बल्कि इस Line के Code के Execute होते ही तुरन्त निम्नानुसार अगली Line का Code Execute हो जाता है:

Console.WriteLine(“Hello! <0>. How are you?”, Console.ReadLine());

इस Code Line में हमने WriteLine() Method के अन्दर ही Console.ReadLine() Method को Call किया है। चूंकि किसी भी Programming Language में Inner Parenthesis की Priority हमेंशा सर्वाधिक होती है, इसलिए इस Code में सबसे पहले निम्न Code Execute होता है:

Console.ReadLine()

ये Code Execute होते ही CRL Keyboard से तब तक Type किए जाने वाले Characters को Read करता है, जब तक कि User Keyboard के “Enter Key” को Press नहीं करता। जैसे ही User Keyboard पर स्थित “Enter Key” को Press करता है, ये Method Terminate हो जाता है और Input किए गए सारे Characters Computer की एक Temporary Memory में Store हो जाते हैं, जो कि WriteLine() Method में Current Position पर उपलब्‍ध रहते हैं।

उदाहरण के लिए यदि हम “Kuldeep” नाम को Keyboard से Input करते हैं, जैसाकि पिछले Program के Output में दिखाया गया है, तो ये नाम हमारे पिछले Statement में Console.ReadLine() Method की Position पर निम्नानुसार उपलब्‍ध रहता है:

Console.WriteLine(“Hello! <0>. How are you?”, “Kuldeep” );

C# हमें Numerical Numbers के माध्‍यम से वह Position Specify करने की सुविधा Provide करता है, जहां पर हम Keyboard से Input की जाने वाली String को Place करना चाहते हैं।

उपरोक्त Code Line में हम Position पर हम ReadLine() Method द्वारा Read होने वाली String को Display करना चाहते हैं। इसलिए जब Console.WriteLine() Statement Execute होता है, तो हमें निम्नानुसार Output प्राप्त होता है:

Hello! Kuldeep. How are you?

जहां हम देख सकते हैं कि Keyboard से Input किया गया नाम Exactly उसी Position पर है, जहां पर Numerical Position को Specify किया गया था।

WriteLine() Method में हम जितने चाहें, उतने Numerical Positions को Specify कर सकते हैं, जबकि एक से ज्यादा Numerical Position को Specify करने पर हमें केवल Numerical Numbers को Incremented Form में Specify करना होता है।

इस Example Program में हमने Console.WriteLine() Method में दो Numerical Positions को Define किया है, जहां Position पर पहला Argument Value “Kuldeep” Place हो जाता है, जबकि Position पर दूसरा Argument Value 32 Place हो जाता है। परिणामस्वरूप हमें उपरोक्तानुसार Output प्राप्त होता है।

Цукерберг рекомендует:  Коворкинг - Ищу однокурсовиков по геймдизайну

यदि हम चाहें तो Console.WriteLine() Method में समान Placeholder Number को Multiple Times Repeat भी कर सकते हैं। जैसे:

जैसाकि इस Output द्वारा हम समझ सकते हैं कि हम WriteLine() Method में एक ही Placeholder को कई बार Use कर सकते हैं, जैसाकि उपरोक्त Program में किया गया है। जबकि Placeholder को Repeat करने पर हमें उनसे Associated Values को Repeat करने की जरूरत नहीं होती। साथ ही Placeholder हमेंशा First Parameter को ही Represent करता है, भले ही हमने उसे Console.WriteLine() Method में किसी भी स्थान पर क्यों न Specify किया हो।

C# के इस System.Console.WriteLine() Method की एक और विशेषता है कि हम इसे Exactly Java के System.out.println() Method की तरह Use कर सकते हैं। उदाहरण के लिए यदि हम चाहें तो ConsoleReadWrite.cs Program को हम निम्नानुसार तरीके से भी Create कर सकते हैं:

और जैसाकि हम इस Program के Output द्वारा समझ सकते हैं कि दोनों ही Programs का Output Exactly एक समान है, जो इसी बात का Indication है कि हम System.Console.WriteLine() Method को Exactly Java के System.out.println() Method की तरह Use कर सकते हैं।

Format String

WriteLine() Method के साथ हम कई तरह के Format Parameters Specify करके Output को ज्यादा बेहतर तरीके से Display कर सकते हैं और ऐसा करने के लिए हमें Format String को Use करना होता है, जिसका General Form निम्नानुसार होता है:

argument-number के रूप में हम Based Number को Specify करके ये तय करते हैं कि किस Position के Argument के मान को Current Position पर Display करना है। जबकि width Argument के रूप में हम Displayed Field की Minimum Width को Specify करते हैं तथा format के रूप में हम उस Format Value को Specify करते हैं, जिसके अनुसार हम Output को Display करना चाहते हैं।


widthformat दोनों ही Parameters Optional हैं। इसलिए पिछले Programs में हमने इसे <0>, के Format में Use किया है। जबकि यदि हम इसे पिछले Program को ही Modify करते हुए निम्नानुसार Specify करें:

जब हम इस तरह से WriteLine() Method में Format String Specify करते हैं, तो Method में Specified Parameters, Display होने से पहले 20 Characters की Space Reserve करते हैं और फिर Right Side से Content Display होना शु: होते हैं।

किसी भी अन्‍य Programming Language की तरह ही C# के भी अपने कुछ Fundamental Programming Constructs हैं, जिन्हें अगले कुछ Sections में Discuss किया जा रहा है। ये Fundamental Programming Constructs लगभग पूरी तरह से C/C++Java के समान हैं। इसलिए यदि आप इन तीनों में से किसी भी Programming Language को ठीक से जानते हैं, तो आपको इन Concepts को समझने में बिल्कुल भी समय नहीं लगेगा। (C# Console Application Example)

ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।

C#.NET in Hindi | Page:908 | Format: PDF

Создание простого консольного приложения в C#

Дополнительные материалы к занятию можно скачать здесь.

Упражнение 5.1. Знакомство с оператором вывода

Для выполнения работы мы будем использовать среду разработки MS Visual Studio 2010.

Ход выполнения работы:

  1. Запустите VS 2010. Выполните следующие команды: Файл -> Создать проект -> Visual C# -> Консольное приложение -> practice_1_1.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.2. Знакомство с переменными

Создаем новое консольное приложение C#. Называем проект practice_1_2.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.3. Знакомство с переменными

Создаем новое консольное приложение C#. Называем проект practice_1_3.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.4. Знакомство с математическими функциями. Нахождение наименьшего из двух чисел

Создаем новое консольное приложение C#. Называем проект practice_1_4.

Наберите в окне кода следующую программу:


Получаем следующий результат:

Упражнение 5.5. Условные операторы. Знакомство с конъюнкцией и дизъюнкцией

Создаем новое консольное приложение C#. Называем проект practice_1_5.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.6. Знакомство с математическими функциями. Нахождение площади круга

Создаем новое консольное приложение C#. Называем проект practice_1_6.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.7. Знакомство с математическими функциями. Решение квадратного уравнения

Создаем новое консольное приложение C#. Называем проект practice_1_7.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.8. Знакомство с математическими функциями Нахождение наибольшего из пяти чисел

Создаем новое консольное приложение C#. Называем проект practice_1_8.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.9. Знакомство с циклом for. Нахождение суммы ряда чисел от 1 до 10

Создаем новое консольное приложение C#. Называем проект practice_1_9.

Наберите в окне кода следующую программу:

Получаем следующий результат:

Упражнение 5.10. Знакомство с возможностями форматирования (Герберт Шилдт)

Создаем новое консольное приложение C#. Называем проект practice_1_10.

C# Console UWP Applications

We’ve just published an update to the Console UWP App project templates on the Visual Studio marketplace here. The latest version (v1.5) adds support for C#. The C# template code only works with Visual Studio 2020 version 15.7 or later. In a previous post, I described how to build a simple findstr UWP app using the C++ Console templates. In this post, we’ll look at how to achieve the same with C#, and call out a few additional wrinkles you should be aware of.

Having installed the updated VSIX, you can now choose a C# Console UWP App from the New Project dialog:

N ote that C# console apps are only supported from version 10.0.17134.0 of the platform. You should therefore specify a version >= 10.0.17134 for the minimum platform version when you create your project. If you forget this step, you can fix it at any time later by manually editing your . csproj and updating the TargetPlatformMinVersion value.

Also note that with the C# template, you might get the error message “Output type ‘Console Application’ is not supported by one or more of the project’s targets.” You can safely ignore this message – even though it is flagged as an error, it doesn’t actually make any difference to anything and doesn’t prevent the project from building correctly.


As with the C++ template, the generated code includes a Main method. One difference you’ll notice with the C# version is that the command-line arguments are passed directly into Main. Recall that in the C++ version, you don’t get the arguments into main, but instead you need to use the global __argc and __argv variables. Notice that you can also now use the System.Console APIs just as you would in a non-UWP console app.

As before, for the file-handling behavior needed for the findstr app, you need to add the broadFileSystemAccess restricted capability. Adding this will cause your app to get some extra scrutiny when you submit it to the Store . Y ou will need to describe how you int end to use the feature, and show that your usage is reasonable and legitimate.

Because the app will be doing some simple file handling and pattern matching, in the C++ version, I had to #include the Windows.Storage.h and regex, and declare the corresponding namespaces. In C#, you need the equivalent Windows.Storage and System.Text.RegularExpressions namespaces.

For the findstr functionality, recall that I’m expecting a command-line such as “CsFindstr foo C:\Bar”, where “foo” is the pattern to search for, and “C:\Bar” is the folder location from which to start the recursive search. I can strip out all the generated code in Main, and replace it with firstly a simple test for the expected number of command-line arguments, and secondly a call to a RecurseFolders method (which I’ll write in a minute). In the C++ version, I tested __argc The GetDirectories method is the actual recursive method that performs the same operation (get the files in the current folder, then recurse sub-folders):

Finally, the SearchFile method, which is where I’m doing the pattern-matching, using Regex . As before, I’m enhancing the raw search pattern to search for any whitespace-delimited “word” that contains the user-supplied pattern. Then I walk the returned MatchCollection , and print out all the found “words” and their position in the file.

With this, I can now p ress F5 to build and deploy the app. For console apps it often makes sense to set the Debug properties to “Do not launch, but debug my code when it starts” – because the most useful testing will be done with varying command-line arguments, and therefore by launching the app from a command prompt rather from Visual Studio.

I can t est the app using a command window or powershell window:

That’s it! You can now write Console UWP apps in C#. Full source code for this sample app is on Github here .

C# консоль для выполнения простых «скриптов»

Вы когда нибудь выполняли массовое переименовывание файлов, или какую-нибудь другую, кажущуюся банально лёгкой, но рутинную задачу? Ни разу не создавали bat’ники, но знаете C#?

Находясь в похожей ситуации, в течение 15 минут было создано довольно простое приложение которое похоже на консоль, но которое понимает C#.

Приложение работает по принципу запоминания кода, и выполнения полученного скрипта. Поддерживается выполнение скрипта из файла, который появляется в директории с приложением при первом выполнении.

Были добавлены базовые команды, которые требуются для создания скрипта через консоль и его выполнения:
!show — показывает запомненный скрипт целиком
!del — удаляет последнюю строку в скрипте
!clear — стирает скрипт
!run — выполнит скрипт и сохранит его содержимое в файл «script.cs»
!runsc — выполнит скрипт из файла «script.cs» (для случая если вы редактируете файл текстовым редактором)

Исходник Program.cs (собственно всего приложения):

using System ;
using System.CodeDom.Compiler ;
using System.Collections.Generic ;
using System.IO ;
using System.Reflection ;
using System.Text ;
using Microsoft.CSharp ;

namespace SharpConsole
<
class Program
<
const string header = @»
using System;
using System.IO;
using System.Net;
using System.Threading;
using System.Collections.Generic;

Цукерберг рекомендует:  Как протестировать SOAP-сервис

namespace CScript
<
public class Script
<
public static void ScriptMethod()
<
» ;
const string footer = @»
>
>
>» ;

static void Main ( string [ ] args )
<
Console. Title = «SharpConsole» ;
Console. WriteLine ( «Welcome to SharpConsole v0.1. Type !help for help.» ) ;

List string > code = new List string > ( ) ;
while ( true )
<
Console. Write ( «csharp> » ) ;
string line = Console. ReadLine ( ) ;
switch ( line )
<
case «!run» :
<
string program = FormatSources ( code ) ;
File. WriteAllText ( «script.cs» , program ) ;
ExecuteScript ( program ) ;
>
break ;
case «!show» :
<
Console. WriteLine ( ) ;
Console. WriteLine ( FormatSources ( code ) ) ;
Console. WriteLine ( ) ;
>
break ;
case «!del» :
code. RemoveAt ( code. Count — 1 ) ;
break ;
case «!clear» :
<
code = new List string > ( ) ;
Console. WriteLine ( «Done.» ) ;
>
break ;
case «!runsc» :
<
string script = File. ReadAllText ( «script.cs» ) ;
ExecuteScript ( script ) ;
>
break ;
case «!help» :
<
string [ ] commands = new string [ ]
<
«1. Type your code and it will be added in script» ,
«2. !show will shows your code» ,
«3. !del remove last line from your code» ,
«4. !clear remove all lines from your code» ,
«5. !run will run script in memory and writes it in script.cs» ,
«6. !runsc will run script.cs» ,
«Have fun! :)» ,
> ;
foreach ( var str in commands )
Console. WriteLine ( str ) ;
>
break ;
default :
<
code. Add ( » » + line ) ;
>
break ;
>

private static void ExecuteScript ( string program )
<
var CSHarpProv >= CSharpCodeProv >CreateProvider ( «CSharp» ) ;
CompilerParameters compilerParams = new CompilerParameters ( )
<
GenerateExecutable = false ,
GenerateInMemory = true ,
> ;
compilerParams. ReferencedAssemblies . AddRange ( new string [ ]
<
«System.dll» ,
«System.Core.dll» ,
«System.Net.dll» ,
> ) ;
var compilerResult = CSHarpProv >CompileAssemblyFromSource ( compilerParams, program ) ;
if ( compilerResult. Errors . Count == 0 )
<
Console. WriteLine ( «Executing. » ) ;
try
<
compilerResult. CompiledAssembly . GetType ( «CScript.Script» ) . GetMethod ( «ScriptMethod» ) . Invoke ( null , null ) ;
Console. WriteLine ( «Done.» ) ;
>
catch ( Exception e )
<
Console. WriteLine ( e. InnerException . Message + «rn» + e. InnerException . StackTrace ) ;
>
>
else
<
foreach ( var oline in compilerResult. Output )
Console. WriteLine ( oline ) ;
>
>

private static string FormatSources ( List string > code )
<
string program = header ;
StringBuilder sb = new StringBuilder ( program ) ;

foreach ( var sc in code )
<
sb. AppendLine ( sc ) ;
>
sb. AppendLine ( footer ) ;
return sb. ToString ( ) ;
>
>
>

По умолчанию, при выполнении скрипта, к сборке подключаются 3 референса:

compilerParams. ReferencedAssemblies . AddRange ( new string [ ]
<
«System.dll» ,
«System.Core.dll» ,
«System.Net.dll» ,
> ) ;

Но вы можете добавить другие для ваших нужд.

Надеюсь это будет кому-нибудь полезно! Буду рад ответить на вопросы.

Обучение C#


Формула программиста

Работая с этим сайтом, Вы даете согласие на использование файлов Cookie.

Создание консольного приложения на языке C#

ключевое слово namespace , обозначающее пространство имён, используется для объявления области, которая содержит набор связанных объектов.

Внутри указанного пространства имен расположен основной класс программы

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

Откомпилируем проект, выбрав меню Сборка ⇒ Пересобрать решение.

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

Переходите к решению консольных задач в разделах Семантика и Алгоритмика

Автор: Вставская Елена Владимировна

Начинаем практику по языку C#

Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.

Основатель проекта

Вебинары C#

+ Бесплатно, каждую субботу
+ Создание программ с нуля
+ Решение консольных задач

Видео-уроки

+ 300 практических видеоуроков
+ 400 интерактивных задач
+ Видео-решения и разбор

Миссия

Погружение в язык C#
Мотивация к изучению языка
Прокачка навыков программирования

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Калькулятор C# в консоли

В данном уроке опять создадим простенький калькулятор на языке C#, но в этот раз будем работать в консоли.
Калькуляторы на Windows Forms можно посмотреть здесь и здесь.

Данный калькулятор абсолютно элементарен и требует минимальных знаний языка. Создаём проект (“Файл” ->”Создать”->”Проект”->”Консольное приложение”) и объявляем наши переменные:


Double – это тип переменной с плавающей запятой, иными словами, тип, в который можно записать десятичные числа, причём довольно большие. В него поместится как значение 5, так и значение 5,45, и даже значение 5,4571601695, также в нём можно использовать и отрицательные числа.
В переменную a мы внесём первое число, которое запишет пользователь. В переменную b – второе число. А переменная total будет выводить результат математических операций с переменными а и b.

Char – это тип переменной в виде какого-либо символа, будь то буква, цифра или какой-нибудь знак. В переменную oper мы будем заносить знак математической операции над числами. В нашем калькуляторе будут только самые основные – “+”, “-“, “*” и “/”.

Итак, мы объявили переменные, теперь нам надо узнать, что конкретно нужно посчитать пользователю, а для этого придётся считывать данные, которые он будет вводить:

Сначала мы выводим на консоль надпись о том, чтобы пользователь ввёл первое число.

В следующей строке мы присваиваем переменной a введенное пользователем число, но при этом не забываем, что введенные пользователем данные всегда имеют строковой формат string, а так как у нашей переменной тип double, то надо отконвертировать string в double соответствующим методом Convert.

Примерно то же самое мы проделываем с переменной oper, но конвертируем string уже не в double, а в char, потому что переменная oper имеет такой тип данных.

Точно то же самое, что было с переменной a проделываем и с переменной b, так как они одинакового типа.

Числа получены. Но пока неизвестно, как ими оперировать, так как главное для нас – узнать что за знак скрывается в переменной oper, и уже исходя из этого, производить операции над числами:

Для этого мы используем оператор условия if (если).
Первая строка звучит примерно так: если в переменной oper записан знак “+”, то..

..мы присваиваем переменной total сумму переменных a и b и выводим ответ на экран. В кавычках записаны слова, которые выводятся на экран, а переменные, расположившиеся среди плюсов выводят свои значения. Пример такого ответа выглядит вот так:

По подобию первого условия мы создаём остальные, используя операторы else if (так положено семантически, если для алгоритма необходимы какие-либо условия. Если условия не необходимы, то можно использовать оператор else, как написано ниже).

Мы расписали все необходимые нам операторы. Но что, если пользователь введёт какой-нибудь неверный оператор? Тогда нам следует предупредить его, что такого оператора нет. Для этого мы используем else. Логика такая – если у нас в oper имеется знак плюса – мы складываем, если же минус -вычитаем, знак умножения- умножаем, знак деления – делим, если в oper имеется любой другой знак (всё остальное), то нам уже не нужно какое-то определение условия (как, например, oper==’+’), поэтому можно обойтись простым else.

Наша программа уже работает, но, пожалуй, можно добавить ещё одну несложную деталь.
А что, если пользователь захочет выполнить несколько операций? Например, сначала сложить два числа, а затем умножить два других числа? Для этого ему пришлось бы перезапускать программу. Но можно сделать и иначе:

Как запустить winform из консольного приложения?

Как создать, выполнить и управлять winform из консольного приложения?

Самый простой вариант — запустить проект форм Windows, а затем изменить тип вывода на консольное приложение. В качестве альтернативы просто добавьте ссылку на System.Windows.Forms.dll и начните кодирование:

Важным битом является [STAThread] для вашего метода Main() , необходимого для полной поддержки COM.

Недавно я хотел сделать это и обнаружил, что меня не устраивает ни один из ответов здесь.

Если вы следуете совету Marc и устанавливаете тип вывода в консольное приложение, есть две проблемы:

1) Если вы запустите приложение из Проводника, вы получите раздражающее окно консоли за вашей формой, которое не исчезнет, ​​пока ваша программа не выйдет. Мы можем смягчить эту проблему, вызвав FreeConsole перед отображением GUI (Application.Run). Досада здесь заключается в том, что окно консоли все еще появляется. Он сразу уходит, но есть на мгновение ничто.

2) Если вы запустили его с консоли и отобразили графический интерфейс, консоль заблокирована до выхода GUI. Это связано с тем, что консоль (cmd.exe) считает, что она должна запускать консольные приложения синхронно, а приложения Windows — асинхронно (эквивалент unix «myprocess &» ).

Если вы выходите из выходного типа в качестве приложения Windows, но правильно вызываете AttachConsole, вы не получаете второе окно консоли при вызове с консоли, и вы не получаете ненужную консоль при вызове из Explorer. Правильный способ вызова AttachConsole — передать ему -1. Это заставляет наш процесс присоединяться к консоли нашего родительского процесса (окно консоли, которое запустило нас).

Однако это имеет две разные проблемы:

1) Поскольку консоль запускает приложения Windows в фоновом режиме, она сразу отображает приглашение и позволяет вводить дополнительные данные. С одной стороны, это хорошая новость, консоль не заблокирована в вашем графическом приложении, но в случае, когда вы хотите вывести вывод на консоль и никогда не показывать графический интерфейс, выход вашей программы появляется после подсказки, и никакое новое приглашение не появляется отображается, когда вы закончите. Это выглядит немного запутанным, не говоря уже о том, что ваше «консольное приложение» работает в фоновом режиме, и пользователь может выполнять другие команды во время работы.

2) Перенаправление потока также перепутано, например. «myapp некоторые параметры > somefile» не могут перенаправляться. Для перенаправления потока требуется значительное количество p/Invoke для исправления стандартных ручек, но оно разрешимо.

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

Доступ к dbContext в приложении консоли С#


Я попытался понять это, но я застрял.

У меня есть приложение Net Core 2 с уровнями Service/Repo/Api/Angular, но теперь я хочу «подключить» консольное приложение и получить доступ ко всем позитивам, которые я уже создал. Я, кажется, в беспорядке статических объектов и DI и нулевые параметры. Во всяком случае, вот упрощенная версия моего кода.

Цукерберг рекомендует:  Контекстная реклама. Привлечение клиентов

Я получаю классический

«Ссылка на объект требуется для нестатического поля»

ошибка. Затем, исследуя здесь, я поменял вещи на статические, а затем все стало нулевым.

Это не просто DbContext, который я пытаюсь ввести. Я также пытаюсь

private ManagerService _managerService;

но получая такие же ошибки.

Обновить

Если я попробую

private static ApplicationDbContext _appDbContext = new ApplicationDbContext();

как было предложено несколько раз ниже, тогда я получаю ошибку

Нет аргументов, которые соответствуют требуемому формальному параметру ‘options’ для ApplicationDbContext.ApplicationDbContext(DbContextOptions) ‘

c# dependency-injection .net-core console-application

C# Console Application Example

C# Console Application Example: चूंकि, C# में विभिन्न प्रकार के Input/Output Operations को Perform करने से सम्बंधित सारी Functionalities को System Namespace की Console नाम की Class द्वारा Handle किया जाता है।

इसलिए इससे पहले कि हम आगे बढें, हमारे लिए InputOutput से सम्बंधित कुछ Methods को ठीक तरह से समझ लेना उपयोगी होगा, ताकि विभिन्न प्रकार के C# Programming Concepts को समझने के लिए हम आसानी से Input/Output Related Functionalities को Use करते हुए उपयोगी Programs बना सकें।

.NET Framework में Defined System.Console Class भी एक काफी बडी Class है, जिसमें Console IO से सम्बंधित बहुत सारे Data Members व Methods को Define किया गया है और इन PropertiesMethods को Use करके हम एक Good Looking व Powerful Console Application Develop कर सकते हैं।

C# की इस Console Class में Data Reading के लिए तीन व Writing के लिए 2 Methods को Define किया गया है, जो कि निम्नानुसार हैं:

Read() ReadKey() ReadLine()

Write() WriteLine()

इस Class में Input से सम्बंधित केवल ReadKey() Method को Override किया गया है, जबकि Output से सम्बंधित दोनों Write()WriteLine() Methods को कई तरह के Data को Output करने के लिए कई तरह से Override किया गया है।

.NET Framework की विभिन्न Assemblies और उन Assemblies में Compiled विभिन्न Namespaces और हर Namespace में Defined विभिन्न Types की Detailed Information प्राप्त करने के लिए हम Visual Studio या C# Express Edition के Object Browser Utility का प्रयोग कर सकते हैं, जिसे IDE के View Menu में “Object Browser” नाम के Option को Click करके Activate किया जा सकता है।

जैसाकि निम्न चित्र द्वारा हम समझ सकते हैं कि Left Side में हमें Currently Selected mscorlib.dll Assembly में Exist विभिन्न Types दिखाई दे रहे हैं, जबकि Left Side में Currently Selected Console Class के सभी Members की List को हम Right Side में देख सकते हैं।

साथ ही इस Right Side में दिखाई देने वाले Members की List में हम जिस Member को Select करते हैं, उस Member से सम्बंधित Specific Description जैसे कि Syntax, Summary, Return ValueExceptions आदि की जानकारी प्राप्त हो जाती है।

जैसाकि हमने कहा कि Write()WriteLine() दोनों Methods के कई Overloaded Variations हैं, जिन्हें हम उपरोक्त चित्र में दिखाए अनुसार Object Browser द्वारा देख सकते हैं। लेकिन फिर भी इन दोनों Methods में केवल एक ही मूल अन्तर है और वह ये है कि Write() Method Use करने पर Method के Execute होने के बाद C# Compiler Cursor को New Line में Move नहीं करताए जबकि WriteLine() Method को Use करने पर, Method के Execute होने के बाद C# Compiler Cursor को New Line में Move नहीं कर देता है।

यानी Write() Method Automatically New Line नहीं लेता बल्कि यदि Output Show करते समय New Line की जरूरत हो, तो New Line लेने के लिए हमें “\n” Backslash Character Constant का प्रयोग करना जरूरी होता है। जबकि WriteLine() Method को Use करने पर जैसे ही ये Method Execute होता है, इस Method के बाद लिखा गया Content, Output में अगली Line में ही Display होता है।

इसी तरह से यदि हमें Keyboard से केवल एक Character को Read करना हो, तो हम Read() या ReadKey() Method को Use करते हैं। लेकिन यदि हमें Keyboard से पूरी Line को यानी जब तक User Enter Key Press नहीं करता तब तक लिखे गए सभी Characters को Read करना हो, तो हम ReadLine() Method को Use करते हैं। चलिए, एक और उदाहरण Program द्वारा इन दोनों Methods की Working व Use को समझने की कोशिश करते हैं।


जब इस Program को Compile करके Run किया जाता है, तो CLR सबसे पहले Main() Method पर पहुंचता है, जहां उसे निम्न Statement मिलता है:

Console.Write(“Enter your Name:”);

इस Statement में हमने Write() Method को Use किया है, इसलिए इस Method के Execute होने के बाद Screen पर निम्नानुसार एक Message Display होता है:

Enter your Name:

लेकिन Cursor अगली Line में Move नहीं होता। बल्कि इस Line के Code के Execute होते ही तुरन्त निम्नानुसार अगली Line का Code Execute हो जाता है:

Console.WriteLine(“Hello! <0>. How are you?”, Console.ReadLine());

इस Code Line में हमने WriteLine() Method के अन्दर ही Console.ReadLine() Method को Call किया है। चूंकि किसी भी Programming Language में Inner Parenthesis की Priority हमेंशा सर्वाधिक होती है, इसलिए इस Code में सबसे पहले निम्न Code Execute होता है:

Console.ReadLine()

ये Code Execute होते ही CRL Keyboard से तब तक Type किए जाने वाले Characters को Read करता है, जब तक कि User Keyboard के “Enter Key” को Press नहीं करता। जैसे ही User Keyboard पर स्थित “Enter Key” को Press करता है, ये Method Terminate हो जाता है और Input किए गए सारे Characters Computer की एक Temporary Memory में Store हो जाते हैं, जो कि WriteLine() Method में Current Position पर उपलब्‍ध रहते हैं।

उदाहरण के लिए यदि हम “Kuldeep” नाम को Keyboard से Input करते हैं, जैसाकि पिछले Program के Output में दिखाया गया है, तो ये नाम हमारे पिछले Statement में Console.ReadLine() Method की Position पर निम्नानुसार उपलब्‍ध रहता है:

Console.WriteLine(“Hello! <0>. How are you?”, “Kuldeep” );

C# हमें Numerical Numbers के माध्‍यम से वह Position Specify करने की सुविधा Provide करता है, जहां पर हम Keyboard से Input की जाने वाली String को Place करना चाहते हैं।

उपरोक्त Code Line में हम Position पर हम ReadLine() Method द्वारा Read होने वाली String को Display करना चाहते हैं। इसलिए जब Console.WriteLine() Statement Execute होता है, तो हमें निम्नानुसार Output प्राप्त होता है:

Hello! Kuldeep. How are you?

जहां हम देख सकते हैं कि Keyboard से Input किया गया नाम Exactly उसी Position पर है, जहां पर Numerical Position को Specify किया गया था।

WriteLine() Method में हम जितने चाहें, उतने Numerical Positions को Specify कर सकते हैं, जबकि एक से ज्यादा Numerical Position को Specify करने पर हमें केवल Numerical Numbers को Incremented Form में Specify करना होता है।

इस Example Program में हमने Console.WriteLine() Method में दो Numerical Positions को Define किया है, जहां Position पर पहला Argument Value “Kuldeep” Place हो जाता है, जबकि Position पर दूसरा Argument Value 32 Place हो जाता है। परिणामस्वरूप हमें उपरोक्तानुसार Output प्राप्त होता है।

यदि हम चाहें तो Console.WriteLine() Method में समान Placeholder Number को Multiple Times Repeat भी कर सकते हैं। जैसे:

जैसाकि इस Output द्वारा हम समझ सकते हैं कि हम WriteLine() Method में एक ही Placeholder को कई बार Use कर सकते हैं, जैसाकि उपरोक्त Program में किया गया है। जबकि Placeholder को Repeat करने पर हमें उनसे Associated Values को Repeat करने की जरूरत नहीं होती। साथ ही Placeholder हमेंशा First Parameter को ही Represent करता है, भले ही हमने उसे Console.WriteLine() Method में किसी भी स्थान पर क्यों न Specify किया हो।

C# के इस System.Console.WriteLine() Method की एक और विशेषता है कि हम इसे Exactly Java के System.out.println() Method की तरह Use कर सकते हैं। उदाहरण के लिए यदि हम चाहें तो ConsoleReadWrite.cs Program को हम निम्नानुसार तरीके से भी Create कर सकते हैं:

और जैसाकि हम इस Program के Output द्वारा समझ सकते हैं कि दोनों ही Programs का Output Exactly एक समान है, जो इसी बात का Indication है कि हम System.Console.WriteLine() Method को Exactly Java के System.out.println() Method की तरह Use कर सकते हैं।

Format String

WriteLine() Method के साथ हम कई तरह के Format Parameters Specify करके Output को ज्यादा बेहतर तरीके से Display कर सकते हैं और ऐसा करने के लिए हमें Format String को Use करना होता है, जिसका General Form निम्नानुसार होता है:

argument-number के रूप में हम Based Number को Specify करके ये तय करते हैं कि किस Position के Argument के मान को Current Position पर Display करना है। जबकि width Argument के रूप में हम Displayed Field की Minimum Width को Specify करते हैं तथा format के रूप में हम उस Format Value को Specify करते हैं, जिसके अनुसार हम Output को Display करना चाहते हैं।

widthformat दोनों ही Parameters Optional हैं। इसलिए पिछले Programs में हमने इसे <0>, के Format में Use किया है। जबकि यदि हम इसे पिछले Program को ही Modify करते हुए निम्नानुसार Specify करें:

जब हम इस तरह से WriteLine() Method में Format String Specify करते हैं, तो Method में Specified Parameters, Display होने से पहले 20 Characters की Space Reserve करते हैं और फिर Right Side से Content Display होना शु: होते हैं।

किसी भी अन्‍य Programming Language की तरह ही C# के भी अपने कुछ Fundamental Programming Constructs हैं, जिन्हें अगले कुछ Sections में Discuss किया जा रहा है। ये Fundamental Programming Constructs लगभग पूरी तरह से C/C++Java के समान हैं। इसलिए यदि आप इन तीनों में से किसी भी Programming Language को ठीक से जानते हैं, तो आपको इन Concepts को समझने में बिल्कुल भी समय नहीं लगेगा। (C# Console Application Example)

ये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C#.NET in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।

C#.NET in Hindi | Page:908 | Format: PDF

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих