Anzahl der Stellen ausrechnen (Programmiersprache C)

vom 13.11.2010, 15:01 Uhr

Ich lerne derzeit die Programmiersprache C, um dann im nächsten Schritt auf die Programmiersprache C++ umzusatteln. Doch zuerst möchte ich ein wenig Erfahrung in der Programmierung sammeln. Schließlich ist noch kein Meister vom Himmel gefallen ;)

Derzeit programmiere ich ein kleines Programm, dass mir die Anzahl der Stellen in einer eingegebenen Zahl ausgibt. Doch leider ergibt sich dabei ein kleines Problem: Sobald ich höherwertige Zahlen eingebe, funktioniert das Programm nicht mehr wie gewünscht. Mit höherwertig meine ich Zahlen mit mehr als neun Ziffern. Vielleicht kann ja jemand von euch mal über meinen Programmcode schauen und mir dann anschließend sagen, was ich falsch gemacht habe?

Code: Alles auswählen
int main()
{
int nummer, stelle=1,a;
printf("Zahl eingeben:");
scanf("%d",&zahl);
a=nummer;
while((a=a/10)!=0)
stelle=stelle+1;
printf("%d",stelle);
return(0);
}

Benutzeravatar

» Malcolm » Beiträge: 3256 » Talkpoints: -1,99 » Auszeichnung für 3000 Beiträge



Wahrscheinlich passiert das dann, wenn du den Zahlenbereich deiner Integerzahl überschreitest. Integer ist auf PCs in der Regel eine 32-Bit-Zahl; da du eine vorzeichenbehaftete Darstellung gewählt hast, kannst du maximal eine Zahl bis etwas über 2 Milliarden (2 hoch 31 eben) eingeben.

Um höhere Zahlen einzugeben, musst du ein anderes Zahlenformat wählen. Wenn du auf Integer bleiben willst, kannst zu z.B. long long int (die zwei long sind Absicht) verwenden. Du kannst aber auch eine Flieskommadarstellung verwenden - die zugehörigen Zahlenformate wären dann float oder besser double.

» Weasel_ » Beiträge: » Talkpoints: Gesperrt »


Geht es darum, später noch mit der Zahl zu arbeiten oder willst du wirklich nur die Stellenanzahl ausgeben können? Wenn du noch mit der Zahl arbeiten willst wird das Ganze etwas umständlich, wenn du nur die (ganzzahligen?) Stellen erfahren willst kannst du einen Weg gehen, der nur die eingegebene Zeichenkette verarbeitet, ich gehe dabei von einer Konsolenanwendung aus:

Nachdem du die Zahl eingegeben hast drückst du Enter, dann wird eine Struktur aufgerufen, die eine Variable mit jedem eingelesenen Zeichen um eins hochzählt und stoppt, sobald das "\r" des Enter erscheint.

#include <stdio.h>

int main()
{
int i = -1;
char c = 'A';
printf("Geben Sie eine Zahl ein.\n");
while(c != '\n')
{
scanf("%c", &c);
i++;
}
printf("Ihre Zahl hat %d Stellen.", i);
scanf("%c", &c);
}

Ich habe es getestet, so klappt das bei mir, zumindest für Ganzzahlen. Für Kommazahlen oder zur mehrmaligen Verwendung des Programms bei nur einem Start müsste man natürlich noch einige Anpassungen vornehmen, aber das überlasse ich dir :wink:

» AP Nova » Beiträge: 336 » Talkpoints: 19,85 » Auszeichnung für 100 Beiträge



Das Problem sollte wie von Weasel_ beschrieben darin liegen, dass Du hier int verwendest. Dabei spielt signed oder unsigned keine Rolle, weil es in einem Fall von -2'147'483'648 bis 2'147'483'647 (signed) und im anderen Fall von 0 bis 4'294'967'295 (unsigned) geht. In beiden Fällen jeweils maximal 10 Stellen.

Empfehlen kann man dann, wenn es ein bisschen mehr sein darf, wie eben auch von Weasel_ geschrieben, den Datentypen double. Dann geht es, deutlich mehr Stellen anzugeben (15). Doch auch hier wäre mal ein Ende erreicht.

Geht es tatsächlich gar nicht um Zahlen selbst, so kann man sich eben wirklich überlegen, statt numerischer Datentypen einen String zusammen zu bauen und einfach dessen Zeichen zu zählen.

» derpunkt » Beiträge: 9898 » Talkpoints: 88,55 » Auszeichnung für 9000 Beiträge



Ähnliche Themen

Weitere interessante Themen

^