|
|
C Quellcode |
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
#include <iostream> #include <cstdlib> #include <conio.h> using namespace std; enum tToken { PLUS, MINUS, MUL, DIV, LPAR, RPAR, NUMBER, END, ERROR }; tToken aktToken; double TokenZahlenWert; char *srcPos; tToken sucheToken() { aktToken = ERROR; if (*srcPos==0) { aktToken = END; } else { switch (*srcPos) { case '(': aktToken=LPAR; break; case ')': aktToken=RPAR; break; case '*': aktToken=MUL; break; case '/': aktToken=DIV; break; case '+': aktToken=PLUS; break; case '-': aktToken=MINUS; break; } if (*srcPos>='0' && *srcPos<'9') { aktToken=NUMBER; TokenZahlenWert = 0.0; } while (*srcPos>='0' && *srcPos<'9') { TokenZahlenWert *= 10; TokenZahlenWert += *srcPos-'0'; srcPos++; } if (aktToken != NUMBER) { srcPos++; } } return aktToken; } tToken Error(char *s) { cerr << s << endl; return ERROR; } double PlusMinus(); double Klammern() { double Wert; switch(aktToken) { case NUMBER: sucheToken(); return TokenZahlenWert; case MINUS: sucheToken(); return -Klammern(); case LPAR: sucheToken(); Wert = PlusMinus(); if (aktToken != RPAR) { return Error(") expected"); } sucheToken(); return Wert; case END: return 1; } return Error("primary expected"); } double MulDiv() { double Wert; Wert = Klammern(); while (aktToken==MUL || aktToken==DIV) { if (aktToken==MUL) { sucheToken(); Wert *= Klammern(); } else if (aktToken==DIV) { sucheToken(); Wert /= Klammern(); } } return Wert; } double PlusMinus() { double Wert; Wert = MulDiv(); while (aktToken==PLUS || aktToken==MINUS) { if (aktToken==PLUS) { sucheToken(); Wert += MulDiv(); } else if (aktToken==MINUS) { sucheToken(); Wert -= MulDiv(); } } return Wert; } double Auswertung(char *s) { srcPos = s; sucheToken(); return PlusMinus(); } int main(int argc, char* argv[]) { double Wert = Auswertung(argv[1]); cout << Wert << endl; return 0; } |
|
|
C Quellcode |
1 |
args[1] |
|
|
C Quellcode |
1 |
args[0] |
|
|
C Quellcode |
1 2 3 |
int array[2]; array[3] = 5; |
Quoted from ""Donasa""
0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.
|
|
C Quellcode |
1 2 3 4 5 6 |
char eingabe[50]; cin>>eingabe; double Wert = Auswertung(eingabe); cout << Wert << endl; system("PAUSE"); return 0; |