Софтуерно Инженерство
Loading...
pganev91 avatar pganev91 0 Точки

Проблем при компилирането на 02. Expression / C#

Здравейте! Тепърва започнах да се обучавам по програмиране. Чета няколко книги, едната от които е тази на Светлин Наков "Въведение в програмирането със C#" и се записах в курса по "Основи на програмирането C#". Реших да прегледам архивите от предишните лектори и да се впиша в Judge системата на SoftUni, за да се опитам да реша нещо. Уви, стигнах до задача номер №2 Expression /Израз/ и въвеждайки това в Judge:

using System;

namespace Expression
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine((3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3);
    }
  }
}

получих следната грешка:

"Compiled file is missing. Compiler output: ...\tmpE9A3.tmp(7,7): error CS0103: The name 'Console' does not exist in the current context"...

В dotnetfiddle реших да опитам с using директивата 'System', но получих друга грешка там:
"Fatal Error: Public Main() method is required in a public class"...

Преди това опитах и с using static директивата, но пак ми дава грешки...
using static System.Console;
using static System.Math;
class Program
{
  static void Main()
  {
    WriteLine((3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3);
  }
}

Реших да послушам компилатора от dotnetfiddle и стана:
using System;
namespace Expression
{
  public class Program
  {
    public static void Main(string[] args)
    {
      Console.WriteLine((3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3);
    }
  }
}

Защо се случва това? Във връзка с актуализация на драйвери и библиотеки на C#, или пък използвам по-нова версия на .NET, или пък е заради разликата между .NET Core и .NET Framework?

Благодаря ви предварително!

Поздрави

0
Основи на програмирането 17/08/2019 21:35:53
svetoslav_0 avatar svetoslav_0 1005 Точки

Здравей!

Когато създадеш нов проект във Visual Studio, кодът, който се генерира за теб би трябвало да изглежда долу-горе така:

using System;

namespace Expression
{
  class Program
  {
    static void Main(string[] args)
    {
       Console.WriteLine("Hello World!");
    }
  }
}

За да нямаш проблеми от този тип, не пиптай тази конструкция по никакъв начин. Най-отгоре е достатъчно да имаш точно този "using" (въпреки, че Visual Studio генерира и още няколко, ако не ме лъже паметта, не ги пипай, нека си седят). Namespace може и да нямаш на теория, но така или иначе не ти пречи. Трябва да имаш class и Main фунция, която да бъде статична, да връща void.... и т.н. Наков имаше един лаф преди време: представи си, че си на готварски курс, там, където пише "Console.WriteLine("Hello World!");" (възможно е да липсва този ред при теб), това е твоят тиган, в който готвиш. Всичко друго е извън този твой тиган и за сега там не пипаш. Просто изтриваш този ред и всичко, което ще пишеш на този етап трябва да ти се пада между двете червени скоби.

Колкото до dotnetfiddle: за да пишеш там има една малка особеност: класът и Main фунцията трябва да бъдат публични, което означава, че точно преди "class" и "static" трябва да добавиш думичката "public". Защо така се случва е малко рано, но след време ще можеш да си ги обясниш тези неща, за сега се налага да ги приемаш за даденост. 

ПП: щом ти излиза

"Compiled file is missing. Compiler output: ...\tmpE9A3.tmp(7,7): error CS0103: The name 'Console' does not exist in the current context"...

Тогава е много вероятно да ти липсва using System най-отгоре. Забелязвал съм, че се случва на много хора следната ситуация: решават си задачата във Visual Studio и когато маркират кода си, за да го копират и поставят в Judge, пропускат да маркират даедна част от кода си. Сигурен начин да се избегне тази ситуация е използването на клавишната комбинация Ctrl + A, която маркира целия текст.

0
17/08/2019 19:22:50
pganev91 avatar pganev91 0 Точки

Благодаря ти много за отзива, Светослав!
Стигнах до извода, че и в Judge системата на SoftUni би ми било необходимо да използвам "public" пред "class"-овете и "static void Main" функцията...

Поздрави

0
svetoslav_0 avatar svetoslav_0 1005 Точки

Радвам се, че съм бил полезен, но съм убеден, че не е неободимо класа и Main метода да са публични (или поне Judge не настоява за това), все пак не пречи, по твой избор :)

Поздрави!

0
pganev91 avatar pganev91 0 Точки

Прав си, аз съм се подвел... Грешката ми е била другаде. Току-що опитах пак, всичко работи "100/100"...
Благодаря ти!

0
18/08/2019 04:39:35