kleine Textfunktion - Probleme
-
huhu
ich habe vor mich in C einzuarbeiten. ich habe bereits ein buch durchgearbeitet, und kenne auch kleine programiergrundlagen durch php.
nachdem ich das buch gelesen hab wollte ich mich langsam herrantasten, mit einem kleinem projekt.
und zwar möchte ich eine funktion schreiben die text verlangsamt ausgibt.
also quasi:printf("h"); sleep("50"); printf("i");
und dafür möchte ich eine funktion schreiben. write(text, ms)
ich hänge aber leider schon an den elemntaren dingen fest
und zwar schaffe ich es nicht einen Buchstaben aus einem Array wieder als Buchstaben auszugeben.#include <studio.h> #include <ctype.h> #include <stdlib.h> #include <windows.h> main () { char A[10] = { 'a', 2, 3, 4, 5 }; int i; i = 0; while(A[i]) { printf"%i ", A[i]; i++; } }
Was dabei rauskommt ist:
97 2 3 4 5
Welchen typ außer "char" soll ich denn nehmen damit ein buchstabe auch buchstabe bleibt, und nicht in den zugehörigen zahlencode umgewandelt wird?
Mfg
Chris
-
Du gibst die Zahl als Zahl aus, probiere mal "%c" statt "%i" - dann werden das
die entsprechenden Zeichen.
-
cool das funktioniert!
jetzt errinere ich mich auch wieder das es da auch unterschiede zwischen %i und %c gibt.ich hab mich ja schon über die arrays informiert, und sie scheinen ja auch ähnlich zu sein wie die die man von php kennt.
ich hab mir hier was überlegt:
write(hallo, 500) das hallo irgendwie in die einzelnen buchstaben sprengen, und in einen array schreiben. int = 1; i = 0; while($array[i]) { printf("%c", array[i]); sleep(x); i++; } }
kann man das irgendwie realisieren?
-
Du meinst sowas?
#include <cstdio> #include <ctime> void sleep( clock_t wait ) { clock_t goal; goal = wait + clock(); while( goal > clock() ); } void SlowPrint(char* str,int ms) { while(*str) { putc(*str++,stdout); sleep(ms); } } int main() { SlowPrint("Hallo Welt!",500); return 0; }
-
Danke!
ich hab mir das nötige mal herausgesammelt und meine eigene funktion verfollständigt:
write(char* str, int ms) { while(*str) { printf("%c", *str); Sleep(ms); *str++; } }
danke euch damit wäre mein Frage geklärt!
-
weasel schrieb:
*str++;
Das Sternchen hier ist unnötig, kannst du weglassen. Du willst ja hier nur den Zeiger inkrementieren, ihn aber nicht dereferenzieren.
-
nicht
... *str++; ...
sondern
... str++; ...
-
grr
-
weasel schrieb:
char A[10] = { 'a', 2, 3, 4, 5 }; int i; i = 0; while(A[i]) { printf"%i ", A[i]; i++; } }
Was dabei rauskommt ist:
97 2 3 4 5
Da hast du aber Glück gehabt, dass deine while-Bedingung zufällig gleich nach <5> auf eine 0 gestossen ist, die Endekennzeichnung hast du nämlich vergessen.
Auch meintest du wahrscheinlich die ASCII Zeichen '2'...'5' und nicht die Zeichen an 3...6 Stelle in der ASCII-Tabelle.
Außerdem initialisiert man char-Arrays in C einfacher mit
char A[]={'a','2','3','4','5','\0'};
oder
char A[6]={'a','2','3','4','5'};
oder
char A[]="a2345";
oder
char *A="a2345";Wenn du mir die Unterschiede dieser Initialisierungsvarianten nennen kannst, kannst du deine Einarbeitungsphase in C-Strings als beendet ansehen
-
Wutz schrieb:
char A[]={'a','2','3','4','5','\0'};
oder
char A[6]={'a','2','3','4','5'};
oder
char A[]="a2345";
oder
char *A="a2345";Wenn du mir die Unterschiede dieser Initialisierungsvarianten nennen kannst, kannst du deine Einarbeitungsphase in C-Strings als beendet ansehen
hm
also die ersten beiden sind ja bekannt. einmal unbestimmte anzahl mit ende \0. und einmal vorgegeben.
aber die anderen beiden.... da kann ich nur raten.
-
weasel schrieb:
hm
also die ersten beiden sind ja bekannt. einmal unbestimmte anzahl mit ende \0. und einmal vorgegeben.
aber die anderen beiden.... da kann ich nur raten.Das ist nicht bestanden. Nochmal C-Strings und Arrays angucken!
-
Wutz schrieb:
Da hast du aber Glück gehabt, dass deine while-Bedingung zufällig gleich nach <5> auf eine 0 gestossen ist, die Endekennzeichnung hast du nämlich vergessen.
ich glaub du gehst nochmal in die c vorschule wutzi...