void func(unsigned)
-
hallo.
ich habe zwei fragen:
in herr herolds buch "Linux/Unix-Systemprogrammierung" sehe ich in einem listing folgendes...
void sound(unsigned frequenz) { ....
. im buch C/C++ von Dirk Louis wird in kapitel 6.8 unsigned als ein "Typspezifizierer" genannt, der entscheidet ob ein datentyp vorzeichenbehaftet ode vorzeichenlos ist. nun enthaelt louis' buch eine tabelle, die alle elementaren datentypen und deren wertebereich auflistet und, siehe da, unsigned ist in einer eigenen zeile enthalten - als ein eigener datentyp ? ist unsigned ein datentyp oder ein typspezifizierer, also ein attribut?
beim lesen einiger headerfiles von linux ist mir aufgefallen, dass bestimmte bezeichner und funktionen zwei mal auftreten, einmal »bezeichner« und einmal »__bezeichner«. warum? ist das nur ein aeusseres merkmal, womit die programmierer ihre bezeichner in einer hierarchie ordnen oder syntax? [ja, koennt ich auch in einer linux maillinglist schreiben... aber hier auch:)]
und nun schreibe ich noch die letzte)
while ( c = getc(stdin) != EOF ) { cmmdinpt[i] = c; i++; if (i > CMMDSZE) break; }
warum komme ich nicht aus der schleife raus nachdem ich meine eingabe bestaetige?
ich freue mich wie immer ueber jede antwort
Gruss caspar
-
Eine Grundregel von C: Wenn was fehlt, ergänze int.
unsigned steht für unsigned int.
-
while ( c = getc(stdin) != EOF ) { cmmdinpt[i] = c; i++; if (i > CMMDSZE) break; }
warum komme ich nicht aus der schleife raus nachdem ich meine eingabe bestaetige?
Wenn dein stdin auf der Konsoleneingabe liegt bekommst du da kein EOF rein. Da ja immer Zeichen über die Konsole eingelesen werden, liefert getc hier einfach nie EOF.
-
D. h. du musst auf '\r' bzw. '\n' abprüfen (= Enter). Am besten prüfst du beides ab, da die Behandlung des Zeilenumbruchs in den verschiedenen Betriebssytemen unterschiedlich ist.
Windows = \r\n
Linux = \n
Mac = \r
-
@Entyl_Sa: Unter Unix bekommst du ein EOF, wenn du Ctrl+D drückst, unter Windows/DOS mi Ctrl+Z.
-
while ( c = getc(stdin) != EOF )
fehlen da denn keine Klammer?
while ( (c = getc(stdin)) != EOF )
-
danke fuer die helfenden antworten.
-
AJ schrieb:
D. h. du musst auf '\r' bzw. '\n' abprüfen (= Enter). Am besten prüfst du beides ab, da die Behandlung des Zeilenumbruchs in den verschiedenen Betriebssytemen unterschiedlich ist.
Trotzdem muss man nicht alles überprüfen. Im Textmodus ist in C ein Zeilenumbruch ein '\n', was auch immer das Betriebssystem intern verwendet, spielt keine Rolle.
-
@Daniel
Sicher ist sicher