Suche einen Tip.
-
Ja, möchte/soll c lernen. aber da die grundzüge gleich sind, dachte ich, das ich hier vieleicht hilfe finde.
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das ist C, nutze std::cin>>, noch besser std::getline() um bei einem Zeilenumbruch den Eingabestrom zu beenden... Ich meine heute etwas über boost::locale gelesen zu haben, was sich genau mit solchen Parser-Lücken von normalen std::string's beschäftigt (Groß- Kleinschreibung erkennen).
EDIT:
Na toll, dann ist mein Post wohl unnütz...
-
Nichts für ungut, aber was soll ich genau machen?
-
IEM2009 schrieb:
Nichts für ungut, aber was soll ich genau machen?
erstmal code neu posten, mit cpp tags, wegen der optik.
gruß,
t.
-
hallo!
IEM2009 schrieb:
Ich hoffe mein problem ist halbwegs verständlich beschrieben
Vieleicht kann mir ja jemand einen Tip geben wie ich das problem löse. danke schonmal!
ja, verständlich. problemlösung: eingabepuffer leeren.
habe einen code ein wenig nach meiner nase abgeändert, somit ergibt
sich für die der eine oder andere extra tip:#include <stdio.h> #include <locale.h> // für setlocale // leert den eingabepuffer void call_me_after_scanf_please() // Nur NACH scanf aufrufen. { int c; while ( (c = getchar()) != EOF && c != '\n'); } int main() { unsigned char z; int gr=0,kl=0,za=0,st=0; setlocale(LC_ALL, "German"); // Wir wollen Umlaute und das ß Ding anzeigen. // Ein bisschen mehr Aussagestärke kann nicht schaden. printf("\n\t Uebung 1 - Eingabe und Ausgabe von ASCII Zeichen\n\n\n"); // Der Benutzer soll wissen, was zu tun ist. puts("Zeichen eingeben, mit Entertaste beenden."); // Das Ausrufezeichen kann nun auch gezählt werden. printf("Mehrfach eingegebene Zeichen zählen nur einmal, es wird nur das "); puts("erste Zeichen \ngezählt.\n"); // ein wenig gefrickelt :D while (1) { scanf("%c",&z); if (z=='\n') // Die Entertaste wurde gedrückt. break; call_me_after_scanf_please(); // Eingabepuffer leeren. if ( z>122 ) { puts("Noch nicht implementiert ( äöü etc. )!"); continue; // Umlaute müssen noch umkodiert werden. } // Bisken mehr Infos schaden nie. printf("Zeichen: %c decimal: %3i hexadezimal: %x\n",z,z,z); if (z>=48 && z<=57) za++; // kurzform von za = za + 1 if (z>=65 && z<=90) gr++; // kurzform von gr = gr + 1 if (z>=97 && z<=122) kl++; // kurzform von kl = kl + 1 if ( z<32 ) st++; // kurzform von st = st + 1 } // Ein bisschen mehr Schreibarbeit tut nicht allzu dolle weh. ;) printf( "Großbuchstaben: %i\n" "Kleinbuchstaben: %i\n" "Zahlen: %i\n" "Steuerzeichen: %i\n", gr,kl,za,st); return 0; }
-
Benutze statt scanf getchar.
-
getchar darf ich zur lösung leider nicht benutzen.
@ Big Brother vielen dank!
-
IEM2009 schrieb:
getchar darf ich zur lösung leider nicht benutzen.
Und stattdessen holst du die Zeichen mit
scanf("%c",&z)
?
Das ist Wahnsinn. Wer immer dirgetchar()
verboten hat: jag ihn davon.(z>=48 && z<=57) ...
Das ist auch Wahnsinn. Dafür gibt es man: ctype.h: isdigit, islower, isupper erledigen das genauso.
-
Das wa mein Informatik Prof.
-
IEM2009 schrieb:
Das wa mein Informatik Prof.
Na dann mach dich eben über ihn lustig, indem du dein eigenes getchar() unter Verwendung von scanf() zusammenbaust. Das ist nicht schwer, und kann sich gleich um das kümmern, was call_me_after_scanf_please() macht. Aber es ist, wie gesagt, Wahnsinn, wenn man sowas simples wie getchar() ohne Not durch so ein Monstrum wie scanf() ersetzt.
-
er hat man programm mit einigen schönheitsfehlern dir mich stören abgesegnet.
trozdem danke für eure hilfe, werde sie bestimmt noch mal brauchen