Entwickler-Ecke
C# - Die Sprache - wie muss ich bei der while schleife Verknüpfen?
Kenan - Sa 09.05.09 13:49
Titel: wie muss ich bei der while schleife Verknüpfen?
mein Problem wie muss ich bei der großen while schleife die einzelnen Verknüpfen(|| oder &&)
damit die überprüfung richtig läuft?
Hier ist mein Programm:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68:
| using System; using System.IO;
namespace TaggedValue{ class TaggedValue{ public static string eingabe; public static int i; static void Main(string[] args) {
send(); } public static void send() { bool namew; bool wertw; Console.Write("Eingabe: "); eingabe = Console.ReadLine(); namew = name(); wertw = wert(); while (eingabe[0] != 'i' || eingabe[0] != 'I' && eingabe[0] != 'c' || eingabe[0] != 'C' && eingabe[0] != 's' || eingabe[0] != 'S' && eingabe[1] != ' ' && !namew && !wertw && eingabe[i] != ';' ) { Console.WriteLine("Fehler!"); Console.WriteLine(); Console.Write("Eingabe: "); eingabe = Console.ReadLine();
} StreamWriter send = new StreamWriter("C:\\Users\\Kenan\\Desktop\\pass.txt"); send.WriteLine(eingabe); send.Close();
} public static bool name() { i = 2; bool name; name = false; while (eingabe[i] != ' ') { name = true; i++; } i = i; return name; } public static bool wert() { i++; bool wert; wert = false; while (eingabe[i] != ' ') { wert = true; i++; } i++; return wert;
} } } |
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
jaenicke - Sa 09.05.09 14:57
Da fehlen vor allem Klammern um die einzelnen Teile der Abfrage...
Kenan - Sa 09.05.09 15:03
kannst du mir vl. die while schleife aufschreiben wie sie gehört hab schon sehr viel varianten ausprobiert!
jaenicke - Sa 09.05.09 15:14
Daraus macht der Compiler ggf. sowas:
C#-Quelltext
1: 2: 3: 4:
| while (((eingabe[0] != 'i') || eingabe[0]) != 'I' && eingabe[0] != 'c' || eingabe[0] != 'C' && eingabe[0] != 's' || eingabe[0] != 'S' && eingabe[1] != ' ' && !namew && !wertw && eingabe[i] != ';' ) |
Und deshalb musst du das einfach klammern:
C#-Quelltext
1: 2: 3: 4:
| while ((eingabe[0] != 'i') || (eingabe[0] != 'I') && (eingabe[0] != 'c') || (eingabe[0] != 'C') && (eingabe[0] != 's') || (eingabe[0] != 'S') && (eingabe[1] != ' ') && !namew && !wertw && (eingabe[i] != ';')) |
Ich kenne zwar die Operatorprioritäten bei C# nicht, aber so bist du auf der sicheren Seite und ich bin mir ziemlich sicher, dass != nicht stärker bindet als ||, diese Klammerung also sein muss.
Kha - Sa 09.05.09 16:05
jaenicke hat folgendes geschrieben : |
| [...]ich bin mir ziemlich sicher, dass != nicht stärker bindet als ||, diese Klammerung also sein muss. |
Mööp, im Gegensatz zu Pascal ist sie hier sinnvoll ;) .
Bin mir nicht so sicher, was genau die Logik der Abfrage ist (die Hilfsmethoden sind ebenfalls mehr als undurchsichtig ;) ), aber ich denke mal, das hier ist gemeint:
C#-Quelltext
1: 2: 3: 4:
| while ((eingabe[0] != 'i' && eingabe[0] != 'I' && eingabe[0] != 'c' && eingabe[0] != 'C' && eingabe[0] != 's' && eingabe[0] != 'S') || eingabe[1] != ' ' || !namew && !wertw || eingabe[i] != ';' ) |
Denn: Eine Neuangabe ist nötig, falls KEINER der "Befehle" (?) angegeben ODER die anderen Voraussetzungen nicht erfüllt wurden. und "KEINER der Befehle" bedeutet nichts anderes als "NICHT das UND NICHT jenes UND ...". Die Klammer ist optional, dürfte aber das Verständnis erleichtern.
Man könnte die Abfrage wahrscheinlich auch noch erheblich vereinfachen, aber das kommt ganz darauf an, was danach eigentlich passieren soll.
Absolut zu vermeiden ist es allerdings,
i und
eingabe methodenübergreifend zu benutzen, den ganzen "i++" nach gab es dadurch wohl auch schon ein paar Bugs ;) . Die beiden Hilfsmethoden sollten den String als Parameter bekommen und ein eigenes i benutzen.
Kenan - Sa 09.05.09 16:46
danke so hats geklappt!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!