Bestimmung des Wertebereichs
-
Also die Aufgabe, die besteht, besagt dass ich Wertebereiche von Variablen vom Typ char, short, int und long bestimmen soll.
Das Programm soll die entsprechenden Werte aus den Standard-Definitionsdateien herausnehmen und dann sollen sie berechnet werden.
Wie gehe ich das am besten an ?
Gibt es direkte Funktionen, die solche Aufgaben übernehmen können oder muss man alles selbst schreiben ! ?
-
schau mal in die limits.h rein
da sind eigentlich die wertebereiche drin...auszug:
#ifndef _CHAR_UNSIGNED #define CHAR_MIN SCHAR_MIN /* mimimum char value */ #define CHAR_MAX SCHAR_MAX /* maximum char value */ #else #define CHAR_MIN 0 #define CHAR_MAX UCHAR_MAX #endif /* _CHAR_UNSIGNED */ #define MB_LEN_MAX 2 /* max. # bytes in multibyte char */ #define SHRT_MIN (-32768) /* minimum (signed) short value */ #define SHRT_MAX 32767 /* maximum (signed) short value */ #define USHRT_MAX 0xffff /* maximum unsigned short value */ #define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define LONG_MIN (-2147483647L - 1) /* minimum (signed) long value */ #define LONG_MAX 2147483647L /* maximum (signed) long value */ #define ULONG_MAX 0xffffffffUL /* maximum unsigned long value */ #if _INTEGRAL_MAX_BITS >= 8 #define _I8_MIN (-127i8 - 1) /* minimum signed 8 bit value */ #define _I8_MAX 127i8 /* maximum signed 8 bit value */ #define _UI8_MAX 0xffui8 /* maximum unsigned 8 bit value */ #endif #if _INTEGRAL_MAX_BITS >= 16 #define _I16_MIN (-32767i16 - 1) /* minimum signed 16 bit value */ #define _I16_MAX 32767i16 /* maximum signed 16 bit value */ #define _UI16_MAX 0xffffui16 /* maximum unsigned 16 bit value */ #endif ... ...
was genau sollst du damit machen???
-
Einfach diese besagten Werte dann ausgeben....
Die Ausgabe kann ich ohne große Mühen, dann über printf machen oder ?
-
Ich habs jetzt mal mit deinem Quellcode-Tipp probiert und es hat funktioniert:
#include <stdio.h> #include <float.h> #include <limits.h> #define MB_LEN_MAX 2 /* max. # bytes in multibyte char */ #define SHRT_MIN (-32768) /* minimum (signed) short value */ #define SHRT_MAX 32767 /* maximum (signed) short value */ #define USHRT_MAX 0xffff /* maximum unsigned short value */ #define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define LONG_MIN (-2147483647L - 1) /* minimum (signed) long value */ #define LONG_MAX 2147483647L /* maximum (signed) long value */ #define ULONG_MAX 0xffffffffUL /* maximum unsigned long value */ int main() { printf(" Wert von Short signed Minimum %d\n", SHRT_MIN); printf(" Wert von Short signed Maximum %d\n", SHRT_MAX); printf(" Wert von Short unsigned Maximum %d\n", USHRT_MAX); printf(" Wert von Integer signed Minimum %d\n", INT_MIN); printf(" Wert von Integer signed Maximum %d\n", INT_MAX); printf(" Wert von Integer unsigned Maximum %d\n", UINT_MAX); printf(" Wert von Long signed Minimum %d\n", LONG_MIN); printf(" Wert von Long signed Maximum %d\n", LONG_MAX); printf(" Wert von Long unsigned Maximum %d\n", ULONG_MAX); } // Erklärung des Programms //
Dennoch hab ich die Frage, ob man die Werte nicht doch noch aus einer Standard-Definitionsdatei lesen kann.
Oder funktioniert das nicht so einfach ?!? *etwas unwissend*
-
ich weiß nicht, wie oft ich das noch sagen muss. Es heißt int main(), vor allem, wenn du in ANSI C Forum postest.
Und bitte, mach nicht so lange Kommentare, benutze mehr Zeilen dafür, nicht jeder hat 10000000000x800 Auflösung, wo man nicht so viel scrollen muss (bis 3 Stunden, bis ich auf "Auf Beitrag antworten" klicken kann) . Das macht nur die Threads unlesbar. Danke!
Zu deinem Post: wenn du schon limit.h includierst, dann brauchst du
#define MB_LEN_MAX 2 /* max. # bytes in multibyte char */ #define SHRT_MIN (-32768) /* minimum (signed) short value */ #define SHRT_MAX 32767 /* maximum (signed) short value */ #define USHRT_MAX 0xffff /* maximum unsigned short value */ #define INT_MIN (-2147483647 - 1) /* minimum (signed) int value */ #define INT_MAX 2147483647 /* maximum (signed) int value */ #define UINT_MAX 0xffffffff /* maximum unsigned int value */ #define LONG_MIN (-2147483647L - 1) /* minimum (signed) long value */ #define LONG_MAX 2147483647L /* maximum (signed) long value */ #define ULONG_MAX 0xffffffffUL /* maximum unsigned long value */
nicht selber zu schreiben, das ist der Sinn von limits.h. Weil sonst ist das nicht mehr portabel.
-
lass den ganzen define block weg.
du nimmst die konstanten doch direkt aus der limits.h.
-
ah das war auch meine Frage in der Beziehung.... ob man den dann weglassen kann. Aber okay alles klar !
@ Supertux:
Ich werde nun deine Ratschläge mehr einbeziehen !
-
Hi
supertux schrieb:
das ist der Sinn von limits.h.