Variable nach for-Schleife nicht verwendbar
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
bedeutung
bereich
code
eigentlichen problem
eingabe
funktion
funktionieren
http
laut url
output
peinliche fehler
schleife
schleifen
string
test
trance
url
versucht output
verwendung
welt
-
Hallo!
Ich stehe vor einem höchst seltsamen Problem...Hier mal der Teil des Codes:
for (int count = 0; count < 108; count++) { string output = eingabe.Replace(c1[count], c2[count]); } Console.WriteLine(output);
Nach der Schleife ist output nicht verwendbar. Das Visual Studio meint "Der Name "output" ist im aktuellen Kontext nicht vorhanden."
Wenn ich aber output darunter neu deklariere meint es "Eine lokale Variable mit dem Namen "output" kann in diesem Bereich nicht deklariert werden, weil dadurch "output" eine andere Bedeutung erhalten würde, was bereits im Bereich "untergeordnet" in anderer Bedeutung verwendet wird."
Was ist da los?
Danke im Voraus! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi!
Erstmal sieht es mir so aus, als ob du in der Schleife jedes mal neu "String output" deklarierst, oder funktioniert das unter .NET anders?
Also ich meine bei zB PHP, wenn ich dort einem String etwas anhängen will setz ich ".=", oder hast du mit der Schleife etwas anderes vor?
Zum eigentlichen Problem: Hast du mal versucht output vorher zur deklarieren, also vor der Schleife? -
copynpaste schrieb:
Hi!
Erstmal sieht es mir so aus, als ob du in der Schleife jedes mal neu "String output" deklarierst, oder funktioniert das unter .NET anders?
Also ich meine bei zB PHP, wenn ich dort einem String etwas anhängen will setz ich ".=", oder hast du mit der Schleife etwas anderes vor?
Zum eigentlichen Problem: Hast du mal versucht output vorher zur deklarieren, also vor der Schleife?
Oh ja da hast du Recht... Danke!!
Zwar will ich nichts anhängen aber das mit dem Deklarieren stimmt schon...Ich sollte besser wieder mal so richtig ausschlafen...
Mit "output" hat es komischerweise trotzdem nicht funktioniert... Aber mit "eingabe" gehts. -
in schleifen oder funktionen deklarierte Variablen stehen außerhalb von eben jenen nicht zur verfügung. dazu müssen sie global definiert werden, als konstante definiert werden oder über übergabeparameter übergeben werden...
schreib mal deinen neuen code hin, ich habe irgendwie das gefühl, dass du trotzdem nicht richtig verstanden hast, was der Vorposter dir da sagen wollte... -
Laut MSDN ist "output" kein Schlüsselwort, Variablen die so benannt werden sollten also funktionieren.
Der Code müsste gehen, wenn output davor deklariert wird:
string output = ""; for (int count = 0; count < 108; count++) { output = eingabe.Replace(c1[count], c2[count]); } Console.WriteLine(output);
Beitrag zuletzt geändert: 17.7.2012 8:50:08 von trueweb -
Ich kann zwar kein .Net, aber ich möchte nochwas auf den Punkt bringen:
Variablen sind immer nur in dem Scope gültig, in dem sie deklariert wurden. Ein Scope ist dabei ein bereich zwischen { }. Folgendes würde also auch nicht gehen:
{ string test = "hallo welt"; } Console.WriteLine( test );
Weil test in einem Subscrope im vergleich zur Verwendung steht. Wohingegen:
{ string test = "hallo welt"; Console.WriteLine( test ); }
geht, da die Deklaration und Verwendung im gleichen Scope stattfindet.
Variablen aus einem Übergeordneten Scope können unter umständen genutzt werden. In Schleifen geht das immer, ebenso in switch-case und if-else Statements, aber nur bedingt in Funktionen und Methoden (mittels "global" Schlüsselwort, falls vorhanden oder über Referenzen, falls vorhanden in der Sprache). Folgendes wird also auch gehen:
string test = "hallo welt"; { Console.WriteLine( test ); }
Ich hoffe das bringt ein wenig Licht ins dunkle :)
Liebe Grüße -
trueweb schrieb:
Laut MSDN ist "output" kein Schlüsselwort, Variablen die so benannt werden sollten also funktionieren.
Der Code müsste gehen, wenn output davor deklariert wird:
string output = ""; for (int count = 0; count < 108; count++) { output = eingabe.Replace(c1[count], c2[count]); } Console.WriteLine(output);
Ich weiß, aber komischerweise hat es so trotzdem nicht funktioniert... Keine Ahnung was das los war. Mein Code sieht jetzt genau so aus nur dass output nicht output heißt sondern "ausgabe"...
sebulon schrieb:
schreib mal deinen neuen code hin, ich habe irgendwie das gefühl, dass du trotzdem nicht richtig verstanden hast, was der Vorposter dir da sagen wollte...
Und was gibt dir das Gefühl? Wie gesagt, jetzt funktioniert alles. Dieser peinliche Fehler lag nur an meiner Übermüdung..
Beitrag zuletzt geändert: 18.7.2012 13:19:49 von yorecords -
Auch ich unterstütze die Version von trueweb,
habe aber trotzdem, nach dem Lesen das Threads, das Gefühl, dass in deinem Code noch irgendwas buggy ist.
Zum Beispiel wüsste ich gern, was folgenden Variablen sind bzw. wie diese gefüllt werden:
c1, c2 und eingabe.
Zusätzlich frag ich mich gerade, was genau du mit deinem Programm bewirken willst?
MfG Trance -
trancedrome schrieb:
Auch ich unterstütze die Version von trueweb,
habe aber trotzdem, nach dem Lesen das Threads, das Gefühl, dass in deinem Code noch irgendwas buggy ist.
Zum Beispiel wüsste ich gern, was folgenden Variablen sind bzw. wie diese gefüllt werden:
c1, c2 und eingabe.
Zusätzlich frag ich mich gerade, was genau du mit deinem Programm bewirken willst?
MfG Trance
yorecords schrieb:
Wie gesagt, jetzt funktioniert alles. Dieser peinliche Fehler lag nur an meiner Übermüdung..
Im Endeffekt kann uns doch egal sein, für was dieser Code verwendet wird...
Aber da dort schon mal das "Schlüsselwort Replace" steht, nehme ich an, dass in einer Eingabe bestimmte Wörter, Buchstaben oder ähnliches einfach mal ersetzt wird..
Edit: Vote4Close
Beitrag zuletzt geändert: 6.8.2012 13:37:41 von copynpaste -
Nachdem hier nun Spekualtionen angestellt werden über Fragen, die nicht gestellt wurden:
geschlossen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage