C как вернуться в начало программы

Гуглил я гуглил, и ненагуглил. Надо сделать возврат к началу программы из функции Comprasion(), не могу понять как это сделать, вот код:

using System; using static System.Console; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class Program < static void Main(string[] args) < WriteLine(«Введите целое число от 1 до 10.»); int first_num = Convert.ToInt32(ReadLine()); WriteLine(«Введите еще одно целое число от 1 до 10.»); int second_num = Convert.ToInt32(ReadLine()); Comprasion(first_num, second_num); >private static void Comprasion(int a, int b) < if (0 >a b else; < WriteLine(«Вы ввели неверные числа, проверьте и введите повтоно.»); // Вот тут должен быть переход к началу >> private static void Fun(int n, int k) < int x = 100; for (int i = 1; i else if (i % k == 0) < Write(» Buzz «); >else if (i % n == 0) < Write(» Fizz «); >else < Write($» «); > > > >
Подскажите пожалуйста как это сделать.

Отслеживать
задан 13 сен 2022 в 11:23
5 3 3 бронзовых знака
что значит «из функции»? может, вам банальный цикл нужен?
13 сен 2022 в 11:26

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Вся суть программирования на C++

Используй if и break — пускай функция Comprasion возвращает bool , а не void , и в зависимости от значения, которое вернет функция используй break или continue :

static void Main(string[] args) < while(true)< WriteLine(«Введите целое число от 1 до 10.»); int first_num = Convert.ToInt32(ReadLine()); WriteLine(«Введите еще одно целое число от 1 до 10.»); int second_num = Convert.ToInt32(ReadLine()); if(Comprasion(first_num, second_num) == true) break; else continue; >> private static bool Comprasion(int a, int b) < if (0 >a b else < WriteLine(«Вы ввели неверные числа, проверьте и введите повтоно.»); return false; >>
Отслеживать
ответ дан 13 сен 2022 в 13:21
449 2 2 серебряных знака 14 14 бронзовых знаков

ну и небольшой совет 🙂 называй функции понятными именами — Fun , по названию нельзя понять что эта функция делает

Источник: ru.stackoverflow.com

C# вернуться к началу программы

Я новичок в программировании, и я начал с C# не так давно. У меня вопрос, как мне вернуться к началу этой маленькой программы, если пользователь вводит меньшее число во второй слот?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FizzBuzz < class Program < static void Main(string[] args) < Console.Write(«Starting number? ->»); int number1 = int.Parse(Console.ReadLine()); Console.Write(«Ending number? -> «); int number2 = int.Parse(Console.ReadLine()); if (number1 >= number2) < Console.WriteLine(«Starting number has to be smaller than the ending number!»); >var number = new Queue(); number.Enqueue(9999); int fizzorbuzz = number.Dequeue(); for (int i = number1; i < number2; i++) < number.Enqueue(i); >foreach (int i in number) < if (i % 3 == 0 i % 5 == 0) < Console.WriteLine(«FIZZBUZZZ»); >else if (i % 5 == 0) < Console.WriteLine(«Buzz!»); >else if (i % 3 == 0) < Console.WriteLine(«Fizz!»); >else < Console.WriteLine(i); break; >> > > >
user3844072 16 июл ’14 в 08:26 2014-07-16 08:26
2014-07-16 08:26

4 ответа

Я придумал решение, основанное на всем полезном коде, который я получил от всех вас.

22 Цикл while. Инструкции break, continue, else

Это то, что я имел в виду, это работает так, как я хотел:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FizzBuzz < class Program < static void Main(string[] args) < int smallerNumber = 0; int biggerNumber = 0; bool running = true; while (running) < Console.Write(«Starting number? ->»); smallerNumber = int.Parse(Console.ReadLine()); Console.Write(«Ending number? -> «); biggerNumber = int.Parse(Console.ReadLine()); if (smallerNumber >= biggerNumber) < Console.WriteLine(«Starting number has to be smaller than the ending number!»); >else < running = false; >> var number = new Queue(); number.Enqueue(9999); int fizzorbuzz = number.Dequeue(); for (int i = smallerNumber; i < biggerNumber; i++) < number.Enqueue(i); >foreach (int i in number) < if (i % 3 == 0 i % 5 == 0) < Console.WriteLine(«FIZZBUZZZ»); >else if (i % 5 == 0) < Console.WriteLine(«Buzz!»); >else if (i % 3 == 0) < Console.WriteLine(«Fizz!»); >else < Console.WriteLine(i); >> > > >
user3844072 17 июл ’14 в 09:03 2014-07-17 09:03
2014-07-17 09:03

Читайте также:
Как пользоваться программой screen

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

static void Main(string[] args) < while(DoJob()) <>> static bool DoJob() < . return true; // want restart . return false; // want exit >
user1997232 16 июл ’14 в 08:43 2014-07-16 08:43
2014-07-16 08:43
int number1; int number2; do < Console.Write(«Starting number? ->»); number1 = int.Parse(Console.ReadLine()); Console.Write(«Ending number? -> «); number2 = int.Parse(Console.ReadLine()); if (number1 >= number2) < Console.WriteLine(«Starting number has to be smaller than the ending number!»); >> while (number1 >= number2);
user301459 16 июл ’14 в 08:30 2014-07-16 08:30
2014-07-16 08:30

введите описание изображения здесь

Вы можете использовать что-то вроде цикла do..while, как показано ниже:

int number1, number2; do < Console.Write(«Starting number? ->»); number1 = int.Parse(Console.ReadLine()); Console.Write(«Ending number? -> «); number2 = int.Parse(Console.ReadLine()); >while (number1

Источник: stackru.com

Операторы jump — break , continue , return и goto

Операторы перехода безоговорочно передают управление. Оператор break завершает ближайший оператор или оператор итерации switch . Оператор continue запускает новую итерацию ближайшего оператора итерации. Оператор return завершает выполнение функции, в которой она отображается, и возвращает управление вызывающему объекту. Оператор goto передает управление инструкции, помеченной меткой .

Сведения об операторе throw , который также создает исключение и безоговорочно передает управление, см. в разделе Оператор throw статьи Инструкции обработки исключений.

Инструкция break

Оператор break завершает выполнение ближайшего внешнего оператора итерации (то есть цикла for , foreach , while или do ) или оператора switch . Оператор break передает управление оператору, который расположен после завершенного оператора (если таковой есть).

int[] numbers = < 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 >; foreach (int number in numbers) < if (number == 3) < break; >Console.Write($» «); > Console.WriteLine(); Console.WriteLine(«End of the example.»); // Output: // 0 1 2 // End of the example.

Во вложенных циклах оператор break завершает только самый внутренний цикл, содержащий его, как показано в следующем примере:

for (int outer = 0; outer < 5; outer++) < for (int inner = 0; inner < 5; inner++) < if (inner >outer) < break; >Console.Write($» «); > Console.WriteLine(); > // Output: // 0 // 0 1 // 0 1 2 // 0 1 2 3 // 0 1 2 3 4

При использовании оператора switch внутри цикла оператор break в конце раздела switch передает управление только из оператора switch . Цикл, содержащий оператор switch , не затрагивается, как показано в следующем примере:

double[] measurements = < -4, 5, 30, double.NaN >; foreach (double measurement in measurements) < switch (measurement) < case < 0.0: Console.WriteLine($»Measured value is ; too low.»); break; case > 15.0: Console.WriteLine($»Measured value is ; too high.»); break; case double.NaN: Console.WriteLine(«Failed measurement.»); break; default: Console.WriteLine($»Measured value is .»); break; > > // Output: // Measured value is -4; too low. // Measured value is 5. // Measured value is 30; too high. // Failed measurement.

Инструкция continue

Оператор continue начинает новую итерацию ближайшего внешнего оператора итерации (то есть цикла for , foreach , while или do ), как показано в следующем примере:

for (int i = 0; i < 5; i++) < Console.Write($»Iteration : «); if (i < 3) < Console.WriteLine(«skip»); continue; >Console.WriteLine(«done»); > // Output: // Iteration 0: skip // Iteration 1: skip // Iteration 2: skip // Iteration 3: done // Iteration 4: done

Читайте также:
Полезные программы для домашнего компьютера

Инструкция return

Оператор return завершает выполнение метода, в котором он присутствует, и возвращает управление и результат функции (при его наличии) вызывавшему методу.

Если член функции не вычисляет значение, используется оператор return без выражения, как показано в следующем примере:

Console.WriteLine(«First call:»); DisplayIfNecessary(6); Console.WriteLine(«Second call:»); DisplayIfNecessary(5); void DisplayIfNecessary(int number) < if (number % 2 == 0) < return; >Console.WriteLine(number); > // Output: // First call: // Second call: // 5

Как показано в предыдущем примере, для досрочного завершения члена функции обычно используется оператор return без выражения. Если член функции не содержит оператор return , он завершается после выполнения последнего оператора.

Если член функции вычисляет значение, используется оператор return с выражением, как показано в следующем примере:

double surfaceArea = CalculateCylinderSurfaceArea(1, 1); Console.WriteLine($»»); // output: 12.57 double CalculateCylinderSurfaceArea(double baseRadius, double height)

Если оператор return содержит выражение, это выражение должно допускать неявное преобразование в тип возвращаемого значения члена функции, если только он не является асинхронным. Выражение, возвращаемое функцией async , должно быть неявно преобразовано в аргумент Task типа или ValueTask , в зависимости от типа возвращаемого значения функции. Если тип возвращаемого значения функции async — Task или ValueTask, используется оператор return без выражения.

Возвраты по ссылке

По умолчанию оператор return возвращает значение выражения. Можно вернуть ссылку на переменную. Для этого используйте оператор return с ключевым словом ref , как показано в следующем примере:

var xs = new int[] < 10, 20, 30, 40 >; ref int found = ref FindFirst(xs, s => s == 30); found = 0; Console.WriteLine(string.Join(» «, xs)); // output: 10 20 0 40 ref int FindFirst(int[] numbers, Func predicate) < for (int i = 0; i < numbers.Length; i++) < if (predicate(numbers[i])) < return ref numbers[i]; >> throw new InvalidOperationException(«No element satisfies the given condition.»); >

Возвращаемые значения могут быть возвращены по ссылке ( ref return).

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

Вызывающий объект может создать новую переменную, которая сама является ссылкой на возвращаемое значение, которая называется ref local. Возвращаемое ссылочное значение означает, что метод возвращает ссылку на некоторую переменную (или ее псевдоним). В область действия переменной должен входить этот метод. Время существования переменной должно продолжаться после того, как метод возвращает управление. Все изменения, которые вызывающий производит с возвращаемым значением метода, применяются к возвращенной переменной.

Если для метода объявлено возвращаемое ссылочное значение, значит он возвращает псевдоним переменной. Цель проектирования часто заключается в том, что вызывающий код обращается к этой переменной через псевдоним, в том числе для ее изменения. Методы, возвращаемые по ссылке, не могут иметь возвращаемый тип void .

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

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

Возвращаемая ссылка должна быть ref_safe_to_escape вызывающего метода. Это означает:

  • Время существования возвращаемого значения должно превышать период выполнения метода. Другими словами, это не может быть локальная переменная в методе, который ее возвращает. Это может быть экземпляр статического поля или класса, а также переданный в метод аргумент. При попытке вернуть локальную переменную возникает ошибка компилятора CS8168 » Не удается вернуть локальный «obj» по ссылке, так как это не ссылка локальной».
  • Возвращаемое значение не может быть литеральным null . Метод с возвращаемым значением ссылки может возвращать псевдоним переменной, значение которой в настоящее null время является значением (uninstantiated) или типом значения, допускаемым значением NULL для типа значения.
  • Возвращаемое значение не может быть константой, элементом перечисления, значением по значению, возвращаемым из свойства, или методом class или struct .
Читайте также:
Программы похожие на аксесс

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

Метод, возвращающий возвращаемое значение ссылки , должен:

  • Включите ключевое слово ссылки перед типом возвращаемого значения.
  • Каждый оператор return в теле метода включает ключевое слово ref перед именем возвращаемого экземпляра.

В следующем примере показан метод, который удовлетворяет указанным условиям и возвращает ссылку на объект Person с именем p :

public ref Person GetContactInformation(string fname, string lname) < // . method implementation. return ref p; >

Инструкция goto

Оператор goto передает управление оператору, помеченному меткой, как показано в следующем примере:

var matrices = new Dictionary < [«A»] = new[] < new[] < 1, 2, 3, 4 >, new[] < 4, 3, 2, 1 >>, [«B»] = new[] < new[] < 5, 6, 7, 8 >, new[] < 8, 7, 6, 5 >>, >; CheckMatrices(matrices, 4); void CheckMatrices(Dictionary matrixLookup, int target) < foreach (var (key, matrix) in matrixLookup) < for (int row = 0; row < matrix.Length; row++) < for (int col = 0; col < matrix[row].Length; col++) < if (matrix[row][col] == target) < goto Found; >> > Console.WriteLine($»Not found in matrix .»); continue; Found: Console.WriteLine($»Found in matrix .»); > > // Output: // Found 4 in matrix A. // Not found 4 in matrix B.

Как показано в предыдущем примере, для выхода из вложенного цикла можно использовать оператор goto .

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

В операторе switch можно также использовать оператор goto для передачи управления в раздел switch с меткой константы case, как показано в следующем примере:

using System; public enum CoffeeChoice < Plain, WithMilk, WithIceCream, >public class GotoInSwitchExample < public static void Main() < Console.WriteLine(CalculatePrice(CoffeeChoice.Plain)); // output: 10.0 Console.WriteLine(CalculatePrice(CoffeeChoice.WithMilk)); // output: 15.0 Console.WriteLine(CalculatePrice(CoffeeChoice.WithIceCream)); // output: 17.0 >private static decimal CalculatePrice(CoffeeChoice choice) < decimal price = 0; switch (choice) < case CoffeeChoice.Plain: price += 10.0m; break; case CoffeeChoice.WithMilk: price += 5.0m; goto case CoffeeChoice.Plain; case CoffeeChoice.WithIceCream: price += 7.0m; goto case CoffeeChoice.Plain; >return price; > >

В операторе switch можно также использовать оператор goto default; для передачи управления в раздел switch с меткой default .

Если метка с заданным именем не существует в текущем члене функции или инструкция goto не находится в область метки, возникает ошибка во время компиляции. Это значит, что оператор нельзя использовать для goto передачи управления из текущего члена функции или во вложенные область.

Спецификация языка C#

Дополнительные сведения см. в следующих разделах статьи Спецификация языка C#:

  • Оператор break
  • Оператор continue
  • Оператор return
  • Оператор goto

См. также

  • справочник по C#
  • Инструкция yield

Источник: learn.microsoft.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru