Eigene Ausgabe
-
Hallo,
ich möchte einmal versuchen, eine eigene Ausgabefunktion zu programmieren, also wie printf. Aber die selbstgeschriebene Funktion soll nicht auf ihr basieren. Hat jemand von euch so etwas schon einmal gemacht, habt ihr evtl. Infos, webseiten?
mfg spacemuck
-
das währe doch nen anfang für integer zahlen... geht aber auch einfacher...
Methode 1:
# include <stdio.h> # include <stdlib.h> # include <ctype.h> int getint (int* z) { char zahlstr[40]; int zahl; int i=0; char negativ=1; zahlstr[0]='\0'; scanf ("%39[^\n]",zahlstr); fflush(stdin); if (zahlstr[0]=='\0') return 1; if (zahlstr[0]=='-') { negativ=-1; i=1; } zahl=0; for (;zahlstr[i];i++) { if (!isdigit(zahlstr[i])) return 1; zahl=10*zahl+zahlstr[i]-'0'; //umrechnung char in integer mit zeiger } *z = zahl*negativ; return 0; } int main(void) { int z; while (!getint(&z)) printf("%i\n",z); system("pause"); return 0; }
aber eigendlich viel zu umständlich.....hab ich mir gedacht....
dann bin ich auf diese idee gekommen.....(schnickschnack wie falsches zeichen und so nicht mit drinn).... aber für double....# include <stdio.h> # include <stdlib.h> int scanf2 (double* eingabe) { anfang: char zahlstr[40]; zahlstr[0]='\0'; scanf ("%39[^\n]",zahlstr); fflush(stdin); if (zahlstr[0]=='\0') { printf("\a"); *eingabe=0; return 1; } *eingabe = atof(zahlstr); //umrechnung char in double(atoi für integer) return 0; } int main () { double eingabe; printf("Eingabe: "); scanf2(&eingabe); printf("\nEingabe: %lf\n\n",eingabe); system("pause"); }
Ich wette es geht irgendwie noch einfacher aber ich bin da net so der hellste.....
naja und ne funktion mit der man nen ganz normalen char einlesen kann gibts ja....
und eigendlich iss das sowieso quatsch sich sowas zu schreiben... es sei denn man will sich nen mathe parser baun...
aber damit komme ich auch net so recht zurecht, wegen der stringzerlegung
Mfg Baltur
-
@Spacemuck: Warum willst du das machen!? Worauf soll die Funktion denn basieren?
Wenn du einen 16-Bit C-Compiler hast:
void put_char( unsigned char c ) { asm { MOV AH, 0x0E MOV AL, [c] XOR BX, BX INT 0x10 } } int main( ) { put_char( 'A' ); }
@Baltur: Hier geht's um die Ausgabe
Baltur schrieb:
es sei denn man will sich nen mathe parser baun...
aber damit komme ich auch net so recht zurecht, wegen der stringzerlegung
Wenn du mit der Zerlegung von Zeichenketten probleme hast, solltest du die Finger lieber vom Parsen lassen
Greetz, Swordfish
-
tud mir leit... habsch mir verlesen.... aber krass jezt kommt ihr hier scho mitt assemblern..... Jezt verstehe ich nix mehr.....*GGGG*
ach ja und mit dem zerlegen von strings hab ich keine probleme..... nur mit dem zerlegen der so entstandenen teilstrings..... vlt hast ja n leichtes beispiel dafür wie ich nen string erst nach einem zeichen zerlege und dann seine n teilstrings wieder nach nem anderen *g* hätte ja was *g* Danke !!!
-
Fang' nicht an, hier den Thread zu kapern. Erstens Passt deine Frage nicht in's "DOS und Win32-Konsole"-Forum und zweitens hat sie auch überhaupt mit Spacemuck's Frage zu tun. Erstelle einen neuen Thread entweder im "ANSI C" oder "C++"-Forum, je nachdem, welche Sprache du verwendest. Beachte dabei
Smart Questions
Greetz, Swordfish
-
Hallo,
Wenn ich mich nicht irre kann man die printf-Funktion nicht 1 zu 1 nachbauen. Ich habe das irgendwo einmal gelesen. Ich guck einmal nach.
MFG winexec*
-
@winexec*: Mir fällt kein Grund ein, warum es nicht möglich sein sollte. Die printf( ) ist selbst in C gschrieben.
Greetz, Swordfish
-
Es wurde AFAIK von Scott Meyers in "Mehr Effektiv C++ programmieren" im Zusammenhang mit Überladungen erwähnt, aber ich weiß nicht mehr genau warum. Ich werde das einmal nachprüfen, aber bis dahin nehm ich meine Aussage zurück. Ich werde euch informieren, falls ich es noch finde.
Die printf( ) ist selbst in C gschrieben.
Echt? War mir (fast) neu
-
winexec* schrieb:
[...] im Zusammenhang mit Überladungen erwähnt, aber ich weiß nicht mehr genau warum.
Überladungen und printf!?
winexec* schrieb:
Die printf( ) ist selbst in C gschrieben.
Echt? War mir (fast) neu
Witzkeks!
Greetz, Swordfish
-
Hallo,
[...] im Zusammenhang mit Überladungen erwähnt, aber ich weiß nicht mehr genau warum.
Überladungen und printf!?
Ja, es war der Kommaoperator wenn ich mich nicht täusche, aber ich sage hier lieber nichts mehr zum Thema, sonst Rede ich mich noch rein.
MFG winexec*
-
Spacemuck schrieb:
ich möchte einmal versuchen, eine eigene Ausgabefunktion zu programmieren, also wie printf. Aber die selbstgeschriebene Funktion soll nicht auf ihr basieren. Hat jemand von euch so etwas schon einmal gemacht, habt ihr evtl. Infos, webseiten?
vielleicht hilft dir das: http://www.cs.ucla.edu/~jkong/public/soft/misc/ANSI.printf.c