2016-03-21 11 views
2
generiert

Hallo hatte ein ziemlich einfaches Problem, ich versuche, ein Konsolenprogramm in C# erstellen, die 3 Eingaben vom Benutzer erhält. Der Start, Stopp und Anzahl der Schritte.wie für for-Schleife

Es soll eine for-Schleife sein, aber ich bekomme nicht wirklich, wie ich Benutzereingaben in die for-Schleife setzen kann, ich habe versucht, int der Benutzereingabe und dann die Namen der int in die for-Schleife aber es gibt mir Fehler.

Das Programm soll aussehen wie das folgende Programm in "Ovning 1" Website ist in Schwedisch, aber ich hoffe, Sie werden es bekommen, versuchte die Website zu durchsuchen, aber es gab nie eine Erklärung gegeben. 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

In Ihrer for-Schleife Sie einen Schreib eine leere Zeile haben .. können Sie für die Eingabe fragen - und dann etwas mit ihm - was haben Sie versucht? – BugFinder

+0

Was meinst du mit Leerzeile? Ist nicht die Console.WriteLine(); soll die Nummern ausspucken? Ich habe versucht Console.WriteLine (StartNummer); noch Fehler tho. Mein Denken hatte etwas damit zu tun, dass das Int nicht irgendwie mit der For-Schleife verbunden ist, seit seiner statischen Leere, aber ich bin noch nicht so erfahren mit denen. –

+0

Warum sollte es? Du hast gesagt "Console.WriteLine();" das schreibt gerade einen Zeilenvorschub .. wenn Sie also 200 Zeilen hätten, würden Sie 200 Zeilenvorschübe bekommen. Wenn Sie möchten, dass etwas gedruckt wird, müssen Sie ihm etwas sagen. – BugFinder

Antwort

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'? oder 'n Pikoh

+0

@Pikoh gut abholen .. Ich war nur OPs ursprünglichen Post wieder .. war nicht wirklich auf die Bedingungen aufmerksam –

+1

Ok..Entfernen meiner -1 :) – Pikoh

4

eine for-Schleife wie diese

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

es in Ihrem aktuellen Code sind drei Fehler aussehen sollte:

for (int startNummer; startNummer >= stopNummer; startNummer + stegNummer) 
  • Sie können eine Variable nicht initialisieren zweimal int startNummer; - das wird
  • nicht kompilieren Ihre Vergleichsköpfe in th e falsche Richtung (außer Sie mit negativen Schritten arbeiten) startNummer >= stopNummer
  • Sie die Zuordnung hier startNummer + stegNummer nicht den berechneten neuen Schritt - es startNummer += stegNummer oder startNummer = startNummer + stegNummer
+0

Das ist korrekt, obwohl (und das ist pingelig), aber die Variable 'Temp' zu verwenden ist keine gute Übung. Dinge benennen ist schwierig, aber wirklich etwas, was man lesen kann und genau weiß, was es bedeutet, ist ideal. In Anbetracht der verwendeten Muttersprache würde ich 'currentNummer' vorschlagen oder was auch immer die übersetzte Version von' current' ist –

+0

Nun @JamesH, verwende ich normalerweise 'i' als Variablennamen in den for-Schleifen. Vielleicht ist das, weil ich alt bin und es früher so war;) – Pikoh

+0

@Pikoh Das mache ich auch, aber 'i' ist zumindest eine übliche Konvention, die die meisten Entwickler verstehen werden. Aber 'Temp' sagt mir nicht wirklich was, wo ich zumindest mit' i' weiß, dass es ein Index für eine Schleife ist, die in einem Array verwendet wird. Wieder ist es pingelig, weiß ich. ;) –

1

meisten sieht es in Ordnung sein sollte. Aber einige Dinge machen keinen Sinn,

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

gibt es ein Semikolon ';' am Ende der for-Schleife. Dies endet für eine Schleife, wodurch der nächste geschweifte Klammern-Syntaxfehler entsteht. Auch startNumber> = stopNumber und dann startNumber + stegNumber würden es entweder überhaupt nicht ausführen oder eine Endlosschleife basierend auf den Eingaben ausführen.

Soll diese for-Schleife wie folgt aussehen?

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' ist falsch. Wie bereits in anderen Kommentaren erwähnt, wurde startNummer bereits oberhalb der Schleife deklariert. –

+1

In der Tat! :(Sollte Compiler vorgehalten haben: D – touchofevil

+0

Ich habe festgestellt, dass mein Gehirn das Äquivalent von Fisher Price Baby's First Compiler ist;) –