Ein char in long int umwandeln

Mal etwas, was die Funktionalität bereitstellt (aber für eine Schulaufgabe nicht tauglich ist):
C:
#include <stdio.h>
#include <stdbool.h>

long int str_to_long(char in[])
{
long int zahl=0;
if(sscanf(in,"%ld",&zahl)==0) return -1; // oder den Fehlercode
else return zahl;
}
Das dürfte laufen
Falls es aber eine Aufgabe ist, bei der ihr selbst den Code verfassen müsst:
C:
long int str_to_long(char in[])
{
long int zahl=0;
int z;
bool minus=false;
for(z=0;z<strlen(in);z++)
{
if(in[0]=='-' && z==0) { minus=true; continue; }
if(isdigit(in[z])==0) return -1; // oder anderer Fehlercode
if((zahl+in[z]-'0')*pow(10,z)>LONG_MAX)) return -1;
zahl+=(in[z]-'0')*pow(10,z);
}
if(minus) zahl*=(-1);
return zahl;
}
Das noch für den Fall, dass es eine Schulaufgabe war.
Falls du noch eine Erklärung für die Schule brauchst:
Jedes Zeichen des Strings durch eine for-Schleife laufen lassen.
Dabei prüfen, ob es sich um eine Zahl handelt.
Falls ja, dem Zeichen 48 abziehen, weil 48 im ASCII-Zeichensatz die 0 ist und das Ergebnis (also die Ziffer)
mit der jeweiligen Zehnerpotenz multiplizieren, dass die Zahl an der richtigen Stelle landet.
Falls ein Minuszeichen erkannt wurde, am Schluss noch die Zahl mit -1 multiplizieren.
Ich hoffe, das genügt dir:)
lorenzbrun
 
Zuletzt bearbeitet:
hey danke supper:D, das einzigste was ich noch nicht verstehe ist die zahl die du bei char c [] eingegeben hast, also 1024.
Ich hab da auch andere Zahlen eingesetzt das ging mit den auch.....oder hat diese Zahl ne bestimmte bedeutung?
 
Du meinst jetzt mich, oder (nicht brunlorenz) ?

Um von der Tastatur was einzulesen, brauchts ja klarerweise eine Variable zum abspeichern, bevor ich dann str_to_long damit aufrufe

In C wird das im Normalfall als ein Char-Array, also einfach eine Menge einzelner Buchstaben hintereinander, gemacht.
Und das 1024 heißt hier, dass meine Variable c maximal 1024 Buchstaben speichern kann, nichts weiter.
Wenn du 400 reinschreibst, passen eben bis zu 400 Buchstaben rein, und 1024 ist mir einfach zufällig eingefallen :D.

Falls wer wirklich mehr als 1024 Buchstaben eingibt, hätte meine Variante vom main aber ein Problem.
Da gibts schönere/sicherere Lösungen, aber euer Lehrer gibt sicher keine tausendstellige Zahl ein ( :) ).

Falls du die Zahl änderst, solltest du sie nicht zu niedrig wählen; wie gesagt hätte meine Einfachvariante vom main ein Problem mit einer zu langen Eingabe.

Also nicht 4 oder so, dann ist beim 5 Buchstaben Mist (und man merkt es eventuell nicht beim ersten Mal)
Das Programm könnte auch huntertmal funktionieren und beim 101.Mal abstürzen...

Also entweder entsprechend absichern oder einfach eine große Zahl nehmen und sich auf tippfaule Anwender verlassen.

Auf str_to_long hat das übrigens keine Auswirkungen, die Schlampigkeit liegt allein beim main.

Gruß

PS an brunlorenz:

Die (in der Aufgabe geforderte) Überlaufkontrolle fehlt bei dir.

Und diese Zeile
C++:
zahl+=in[z]-48*pow(10,z);
hat einen witzigen Klammernmangel :)

Und (sorry für das ganze Meckern), aber die Aufgabe schreibt Rechnerunabhängigkeit vor.
Also auch vom Zeichensatz unabhängig.
48 muss nicht '0' sein, '0' in den Code schreiben wäre besser.

Gruß
 
Zuletzt bearbeitet:
Zurück