getch() Funktion

OP #1711561
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
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*/
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.
Warum meinst Du, dass es an getch() liegen soll?  Glaubst Du, dass 
Microsoft und/oder Dein Compilerhersteller einen so schlechten Job 
gemacht haben, das es seine Spezifikationen nicht einhält?  Und dass das 
außer Dir noch niemandem aufgefallen ist?
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.