C Code Korrekturlesen bitte, besonders Menüstruktur! einfacher "Taschenrechner"
-
chmbw schrieb:
Wieso hat die while-schleife keinen Block?
Das sollte man sicherheitshalber so schreiben:
while ((c = getchar()) != EOF && c != '\n') ;
Dann kann man sich den Kommentar sparen, weil das ; ins Auge springt. Das ist eine leere Anweisung, die tut einfach nichts. Die muss dort sein, weil die nächste Anweisung (oder der nächste Block) eben zum while gehört, so ist die Syntax. Genauso solltest du sagen:
while(Hauptmenue() != 0) ; // und weil Vergleiche auf != 0 redundant sind, sagt man oft stattdessen while(Hauptmenue()) ;
chmbw schrieb:
EOF = End Of File, aber was bedeutet das hier genau?? Ende der Funktion?
EOF heisst immer End Of File. Die Standard-Eingabe ist auch nur eine Datei. Damit fängt man den Fall ab, dass die Eingabe zu Ende ist. Das kann passieren, wenn man eine Datei als Eingabe an das Programm leitet (zB
type file.txt | program
auf Windows), oder wenn man explizit die Eingabe beendet, das geht auf den meisten Terminals mit Strg-D oder Strg-Z oder so.chmbw schrieb:
aber als integer gespeichert?!
Ein char ist auch nur eine Ganzzahl, aber der Wertebereich ist meistens kleiner. 'A' ist nur eine andere Weise, um 65 zu sagen (ASCII vorausgesetzt). EOF darf aber kein gültiges Zeichen sein, deshalb muss man für die Rückgabe von getchar() einen grösseren Wertebereich nehmen.
-
EOF darf aber kein gültiges Zeichen sein, deshalb muss man für die Rückgabe von getchar() einen grösseren Wertebereich nehmen.
Da fällt mir ein, dass fricky mal erzählt hat, dass auf 8-Bit-Dingern ein int trotzdem 16 Bit hat. Ich hab mir damals gedacht, dass 8 Bits für eine Zahl wohl doch recht wenig wären, und mir das so erklärt. Aber wenn ein char so gross wie ein int wäre, würde getchar() nicht mehr funktionieren, oder?
-
µngbd schrieb:
Da fällt mir ein, dass fricky mal erzählt hat, dass auf 8-Bit-Dingern ein int trotzdem 16 Bit hat.
bezogen darauf, dass ich noch nie 'nen compiler gesehen habe, der 8-bittige ints hat (wohl aber einen, wo man das einstellen konnte, default war aber auch bei dem 16-bit int). im C-std findeste etwa sowas:
— minimum value for an object of type int INT_MIN -32767 // -(2^15 - 1) — maximum value for an object of type int INT_MAX +32767 // 2^15 -1
und wieder mal sind die standard auswendigkenner gefragt: ist ein 8-bit int laut C-standard theoretisch möglich?
-
zder davebardsley in http://www.linuxforums.org/forum/linux-programming-scripting/44480-sizeof-int.html bestätigt dich und der link http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size sagt auch "An int must be at least 16 bits long.".
-
Nicht wenn ich mit 8Bit ~65000 Zahl darstellen kann! Ich nehm einfach einen komprimierungsalgorithmus...
-
Genmutant schrieb:
Nicht wenn ich mit 8Bit ~65000 Zahl darstellen kann! Ich nehm einfach einen komprimierungsalgorithmus...
Viel Erfolg http://en.wikipedia.org/wiki/Minimum_message_length
-
Genmutant schrieb:
Nicht wenn ich mit 8Bit ~65000 Zahl darstellen kann!
musste passend runden, 0...256...512...768... usw., dann klappt das *fg*
-
;fricky schrieb:
Genmutant schrieb:
Nicht wenn ich mit 8Bit ~65000 Zahl darstellen kann!
musste passend runden, 0...256...512...768... usw., dann klappt das *fg*
Geht sogar noch komprimierter. Sozusagen am komprimiertesten:
int passendRunden(int x){ if(x==0) return 0; else return x/2; }
oder etwas langsamer aber nicht rekursiv:
int passendRunden(int x){ while(x*=3); x*=5; }