2016-03-21 3 views
2

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

Предполагается, что это цикл цикла, но я действительно не понимаю, как я могу поместить пользовательский ввод в цикл for, я попытался сделать int из пользовательского ввода, а затем поместив имена int в цикл for, но это дает мне ошибки.

Программа должна выглядеть следующим образом на сайте «Ovning 1» на шведском языке, но я надеюсь, что вы, ребята, получите ее, попробовали найти сайт, но никаких объяснений не было. http://csharpskolan.se/showarticle.php?id=119

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ovning12 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 

     Console.WriteLine("Mata in Start"); 
     int startNummer = int.Parse(Console.ReadLine()); 

     Console.WriteLine("Mata in Stop"); 
     int stopNummer = int.Parse(Console.ReadLine()); 

     Console.WriteLine("Mata in Steg"); 
     int stegNummer = int.Parse(Console.ReadLine()); 


     for (int startNummer; startNummer >= stopNummer; startNummer + stegNummer) 
     { 
      Console.WriteLine(); 


     } 
    } 
} 
} 
+0

В ваш цикл у вас есть написать пустую строку .. вы можете задать для ввода - а затем сделать что-то с ним - Что вы пробовали? – BugFinder

+0

Что значит пустая строка? Не Console.WriteLine(); должен выплюнуть цифры? Я попробовал Console.WriteLine (startNummer); все еще ошибки tho. Я думал, что это как-то связано с тем, что int не связан каким-то образом с циклом for с момента его статического void, но я еще не настолько опытен. –

+0

Зачем? вы сказали «Console.WriteLine()»; который просто записывает строку. Поэтому, если у вас было 200 строк, вы получите 200 строк. Если вы хотите, чтобы он печатал что-то, вам нужно что-то сказать. – BugFinder

ответ

5
static void Main(string[] args) 
    { 
     Console.WriteLine("Mata in Start"); 
     int startNummer = int.Parse(Console.ReadLine()); 

     Console.WriteLine("Mata in Stop"); 
     int stopNummer = int.Parse(Console.ReadLine()); 

     Console.WriteLine("Mata in Steg"); 
     int stegNummer = int.Parse(Console.ReadLine()); 


     for (int n = startNummer; n < stopNummer; n += stegNummer) 
     { 
      Console.Write(n + " "); 
      Console.Write("{0} ", n); //(Alternative) 
     } 
    } 
+1

'n> = stopNummer'? или 'n Pikoh

+0

@ Pikoh хороший забрать .. Я просто повторно использовал оригинальное сообщение OP .. на самом деле не обращал внимания на условия –

+1

Ok..removing my -1 :) – Pikoh

4

для цикла должно выглядеть так

for (int i = startNummer; i <= stopNummer; i += stegNummer) 
{ 
    Console.Write(i + " "); 
} 

есть 3 ошибки в текущем коде:

for (int startNummer; startNummer >= stopNummer; startNummer + stegNummer) 
  • вы не можете инициализировать переменную дважды int startNummer; - который не будет компилировать
  • ваше сравнение голов в th е неправильное направление (за исключением вы работаете с отрицательными шагами) startNummer >= stopNummer
  • вы не назначая вычисленного новый шаг здесь startNummer + stegNummer - он должен быть startNummer += stegNummer или startNummer = startNummer + stegNummer
+0

Это правильно, хотя (и это nitpicky), но использование переменной 'Temp' не является хорошей практикой. Именование вещей сложно, но действительно то, что вы можете читать и точно знать, что это значит, идеально. Учитывая используемый родной язык, я бы предложил 'currentNummer' или что бы то ни было переведенная версия' current' равна –

+0

Ну @JamesH, я обычно использую 'i' в качестве имени переменной в циклах for. Может быть, это потому, что я старый, и это было так;) – Pikoh

+0

@ Pikoh Я тоже, но 'i' - это, по крайней мере, общее соглашение, которое большинство разработчиков поймут. Но 'Temp' на самом деле ничего не говорит мне, где, по крайней мере, с' i' я знаю, что это индекс для цикла, который будет использоваться с массивом. Опять же, я не знаю. ;) –

1

Большинство из них выглядит хорошо. Но несколько вещей не имеет смысла,

for (int startNummer; startNummer >= stopNummer; startNummer + stegNummer); 
{ 
     Console.WriteLine(); 
} 

есть полуколона ';' в конце цикла for. Это заканчивается для цикла, создавая следующую синтаксическую ошибку фигурных скобок. Также startNumber> = stopNumber, а затем startNumber + stegNumber, возможно, вообще не запускает его или запускает бесконечный цикл на основе входов.

Возможно ли это для цикла, как показано ниже?

for (int start = startNummer /*have to initialize the start value*/; 
    start < stopNummer; 
    start += stegNummer) 
{ 
     Console.Write(start + " "); //need Console.Write to print all numbers on same line. Console.WriteLine puts each index on its own line 
} 
+0

'startNummer + stegNummer' неверно. Кроме того, как указано в других комментариях, startNummer уже объявлен выше цикла. –

+1

Действительно! :(Должен был держать компилятор впереди: D – touchofevil

+0

Я обнаружил, что мой мозг является эквивалентом первого компилятора Fisher Price Baby's;) –

Смежные вопросы