getch() Funktion

OP #1711561
Lesenswert?
• ▲
▼
Ich hab ein Programm geschrieben das thoeretisch Rechnen kann indem man 
nur Zahlen und Zeichen eingibt ohne Bestätigen aber das funktioniert 
nicht ich dank mal es liegt an getch().Hab schon alles ausprobiert.

1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <conio.h>
4

5
int main(int argc, char *argv[])
6
{
7
    char Eingabe;
8
    int sv = 0;
9
    long b = 1;
10
    long speichern [998];
11
    char zahlen [998];
12
    long long ergebnis = 0;
13
    short i = 0;
14
    int zaehle = 0;
15

16

17
    for (;i != 999;)
18
    {
19
      zahlen[i] = 0;
20
      speichern[i] = 0; /*alle arrives auf null*/
21
      i++;
22
    }
23
    i = 0;
24

25
    for (;;) /*Eingabe*/
26
    {
27

28
       i = getch();
29

30
            if (i != 61)
31
            {
32
                zahlen[zaehle] = i;
33
                zaehle++;
34
                i=0;
35
            }
36

37

38

39
        else
40
        {
41
            break;
42
        }
43
    }
44
    i=0;
45

46
    for (;i != ++zaehle;) /*Sortierschleife*/
47
    {
48
        if ((zahlen[i] <= 9)&(zahlen[i] >= 0))
49
        {
50
            speichern[sv] = zahlen[i] * b;
51

52
            if (b == 1)
53
            {
54
                b += 9;
55
            }
56
            else
57
            {
58
                b *= 10;
59
            }
60
        i++;
61
        }
62
        else if (zahlen[i] == 43) /*Plus*/
63
        {
64
            sv++;
65
            speichern[sv] = 43;
66
            sv++;
67
            i++;
68
            b = 0;
69
        }
70

71
        else if (zahlen[i] == 45)/*Minus*/
72
        {
73
            sv++;
74
            speichern[sv] =45;
75
            sv++;
76
            i++;
77
            b = 0;
78
        }
79

80
        else if (zahlen[i] == 42) /*Mal*/
81
        {
82
            sv++;
83
            speichern[sv] =42;
84
            sv++;
85
            i++;
86
            b = 0;
87
        }
88

89
        else if (zahlen[i] == 47) /*Geteilt*/
90
        {
91
            sv++;
92
            speichern[sv] =47;
93
            sv++;
94
            i++;
95
            b = 0;
96
        }
97

98
        else /*Credits xD*/
99
        {
100
            printf ("Was habe sie gemacht !!! \nKeine Buchstaben eingeben das hier ist ein Rechner !!!\n\n\nManager: Tobias\n\nProgammierer: Tobias\n\nDesign: Gibts ja wohl noch keins oder ?!? O_o");
101

102
            return EXIT_FAILURE;
103
        }
104

105
    }
106

107
    i = 1;
108

109
    ergebnis = speichern[0];
110

111

112
    for (;i != ++sv;) /*Ausrechnen*/
113
    {
114
       if (speichern[i] == 43)
115
       {
116
           i++;
117
           ergebnis += speichern[i];
118
           i++;
119
       }
120

121
       else if (speichern[i] == 45)
122
       {
123
           i++;
124
           ergebnis -= speichern[i];
125
           i++;
126
       }
127

128
       else if (speichern[i] == 42)
129
       {
130
           i++;
131
           ergebnis *= speichern[i];
132
           i++;
133
       }
134

135
       else if (speichern[i] == 47)
136
       {
137
           i++;
138
           ergebnis /= speichern[i];
139
           i++;
140
       }
141

142
      else /*Credits xD*/
143
        {
144
            printf ("Was habe sie gemacht !!! \n Keine zwei Rechenzeichen hintereinander eingeben !!!\n\n\nManager: Tobias \n\nProgammierer: Tobias \n\nDesign: Gibts ja wohl noch keins oder ?!? O_o");
145

146
            return EXIT_FAILURE;
147
        }
148
    }
149

150
    printf (" = %d ",ergebnis);
151
    return EXIT_FAILURE;
152
}

Wer hilft kriegt Ehrenplatz in Credits ;)

PS: Mein Compiler ist Code::Blocks und ich hab Windows 7
#1711589
Lesenswert?
• ▲
▼
Tobias H. schrieb:
> aber das funktioniert
> nicht

Dann geh auf Optionen und stell von "funktioniert nicht"
auf "funktioniert" ;-)

Im Ernst, das ist keine Fehlerbeschreibung. Was funktioniert denn nicht?

Was ich so beim überfliegen gefunden habe:
Prüfe nochmal nach, wie lang dein Array wird mit
> char zahlen [998];

Und ob du hier die richtige mit deiner Indexvariablen immer das Array 
"triffst" oder evtl. mal ausserhalb landest (was evtl. zu einem Absturz 
führen kann, nicht muss.).
> short i = 0;
>     for (;i != 999;)

Hier benutzt du ein '&' was ein "bitwise and" ist. Du möchtest aber ein 
"logic and" haben.
>if ((zahlen[i] <= 9)&(zahlen[i] >= 0))

Um eine Prüfung auf ein großes A zu machen kannst du statt 61 auch 'A' 
benutzen (mit dem ' davor und dahinter). Das macht das Programm 
lesbarer. Ein Fehler ist es mit 61 aber nicht.
>if (i != 61)

Genauso hier kannst du '+' benutzen.
>else if (zahlen[i] == 43) /*Plus*/
#1711605
Lesenswert?
• ▲
▼
Was auch immer du da geschrieben hast:

SChmeiss es weg und fang nochmal an.
Aber diesmal:
Arbeite in Schritten. Teile dir die komplette Aufgabe in Teilaufgaben 
auf. Implementiere diese Teilaufgabe und dann teste diese ordentlich. 
Erst dann, wenn eine Teilaufgabe funktioniert, gehst du die nächste 
Teilaufgabe an.
Am besten ist es, wenn du für jede Teilaufgabe eine eigene Funktion 
machst, die nur diese eine Teilaufgabe löst. Wenn eine Teilaufgabe 
kompliziert ist, kann man auch diese wieder ein einfachere Einzelteile 
zerlegen.

Unmengen von Code zu schreiben, der schon von Anfang an nicht 
funktioniert bringt nichts. Du stehst dann da mit ... Unmengen nicht 
funktionierendem Code und hast keine Ahnung, wo du mit der Fehlersuche 
anfangen sollst.


Und ja. Ich meine das wirklich ernst. Schmeiss das weg und fang nochmal 
an. Was du da hast ist, freundlich ausgedrückt, ein grosser Haufen Müll. 
Im Moment sieht das aus, als ob du dich da kräftig übernommen hast.
#1711827
Lesenswert?
• ▲
▼
Tobias H. schrieb:
> Ok aber wenns an getch liegt kann mir dann jemand sagen obs eine
> "Ausweichmöglichkeit" gibt ??

Es liegt nicht am getch()
Klaus wollte dich auf den Arm nehmen.

Das dein Programm generell nicht funktionert, liegt daran, dass es so 
geschrieben ist, dass es noch nicht einmal ansatzweise funktionieren 
kann.
Du bist weit, weit weg von einer auch nur ansatzweisen rudimentären 
Lösung deiner Aufgabenstellung.

Dein Programm ist das C-Äquivalent zu HaPe Kerkeling, wenn er Russisch 
'spricht'. Es sieht zwar so aus wie, ist aber in Wirklichkeit kompletter 
Kauderwelsch.


Klingt vielleicht hart, ist aber die ungeschminkte Wahrheit.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren