Autor Beitrag
Kenan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 09.05.09 13:49 
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:

ausblenden volle Höhe 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 user profile iconChristian S.: Code- durch C#-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 09.05.09 14:57 
Da fehlen vor allem Klammern um die einzelnen Teile der Abfrage...
Kenan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19338
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 09.05.09 15:14 
Daraus macht der Compiler ggf. sowas:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 09.05.09 16:05 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
[...]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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 09.05.09 16:46 
danke so hats geklappt!