Linux <--> Windows Portabilität
-
Benutz doch Unicode! Der sieht dann auf jedem System passend aus.
Du kannst dir nie sicher sein, welche Laendereinstellung jetzt auf welchem System laeuft, somit nutzt dir ein Hardgecodetes Zeichen gar nichts.
-
SnorreDev schrieb:
Benutz doch Unicode! Der sieht dann auf jedem System passend aus.
Ist leider auch nicht garantiert; die passenden Locales müssen nicht überall verfügbar sein bzw nicht jeder muss Unicode-taugliche Terminal-Emulatoren installiert haben, etcetc.
Anfängern würde ich daher nach wie vor dazu raten, dem Problem einstweilen aus dem Weg zu gehen; später kann man sich das ja immer noch genauer ansehen.
-
Jaja, das mit getchar ist so eine Sache; zeig am besten mal ein bisschen Code und wir sagen Dir, wie Du es besser machen kannst.
case '2': clrscr; /* bei '2' */ printf("F%cr welche Kontonummer: ", ue); fgets(vBuf,256,stdin); /* Eingabe der KTO Nummer */ if(!(ktonummer=malloc(strlen(vBuf)))) /* Speicher ausfassen */ Memerr sscanf(vBuf,"%s", ktonummer); for(pTmpK=GetFirst(kontos);pTmpK;pTmpK=GetNext(kontos)) /* durchlaufe alle Kontos */ { if(!strcmp(pTmpK->ktonr,ktonummer)) /* Kontonummervergleich */ break; } do { clrscr; /* Bildschirm loeschen */ if(!pTmpK) /* wenn KTO nicht gefunden */ { printf("Die Kontonummer %s existiert nicht!\n", ktonummer); pkey; /* warte auf Taste */ break; /* keine Aktion */ } printf("KUNDENAKTION\n------------\n\nAktion f%cr Konto: %s (%s, %s)\n\n", ue, ktonummer,pTmpK->n_name,pTmpK->v_name); flush; /* Eingabepuffer leeren */ printf("a] Einzahlung\n"); printf("b] Auszahlung\n"); printf("c] Kontoauszug\n"); printf("e] keine weitere Transaktion f%cr dieses Konto\n", ue); printf("Eingabe: "); fgets(vBuf,256,stdin); sscanf(vBuf,"%c", &menu); /* Menuewahl einlesen */ switch(menu) { case 'a': zahlung(ktonummer,1); /* Zahlungsfkt. mit Schalter 1 */ break; case 'b': zahlung(ktonummer,2); /* Zahlungsfkt. mit Schalter 2 */ break; case 'c': auszug(ktonummer); /* Auszugsfkt. */ break; case 'e': break; default: printf("Ung%cltige Eingabe!\n", ue); pkey; /* warte auf Taste */ break; } }while(menu!='e'); /* solange kein 'e' */ free(ktonummer); break;
Folgendes Makros unter UNIX noch dazu:
#ifdef __unix__ /* UNIX Makros */ #define clrscr system("clear") /* Bildschirm loeschen */ #define ue 'u' /* ue */ #define ae 'a' /* ae */ #define oe 'o' /* oe */ #define Ue 'U' /* Ue */ #define Ae 'A' /* Ae */ #define Oe 'O' /* Oe */ #define pkey getchar() #define flush #endif
Beim ersten Mal funzt alles total gut, aber wenn er das zweite Mal in die while Schleife kommt überspringt er die Eingabe und gibt "ungültige Eingabe" aus.
Wie bekomme ich den am einfachsten oder effektivsten leer.
http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284392&answer=1044873249Hab ich schon probiert, hat aber das Problem nicht gelöst.
fflsuh(stdin); geht voll in die Hose, oder sagen wir behebt das Problem nicht!
Eben das mein ich mit geht in die Hose. Es ist halt undefiniert.
Anfängern würde ich daher nach wie vor dazu raten, dem Problem einstweilen aus dem Weg zu gehen; später kann man sich das ja immer noch genauer ansehen.
Wann ist bei Dir später? Bin ein wissbegieriger Stundent und würde mich über ein in die runde geworfenes Stichwort freuen!
-
Dumme Frage: Heißt es nicht
fflush(stdin);
Du verwendest ständigfflsuh(stdin);
Das gibt es nicht! Es ist nicht definiert, weil du es einfach falsch schreibst!
-
Streusselkuchen schrieb:
Das gibt es nicht! Es ist nicht definiert, weil du es einfach falsch schreibst!
Nein, auch fflush(stdin) ist nicht definiert, siehe FAQ-Eintrag von Shade.
-
Richard: Wenn Du nicht dauernd den Bildschirm löschst, dann brauchst Du auch nicht mit getchar() auf einen Tastendruck warten.
btw, Deine Defines sind IMO nicht das Gelbe vom Ei.
Wann ist bei Dir später? Bin ein wissbegieriger Stundent und würde mich über ein in die runde geworfenes Stichwort freuen!
Wenn Du die C-Grundlagen einigermaßen intus hast, davor bringt es Dir nichts, Dich mit derartigen Dingen zu beschäftigen.
-
Wäre es nicht besser ncurses für dein Project zu benutzen? Wenn ich mich nicht irre, kannst du das auch auf Windows benutzen.
Edit:
PDCurses könnte auch interessant sein.
-
ProgChild schrieb:
Wäre es nicht besser ncurses für dein Project zu benutzen?
Später: Ja.
Zum programmieren lernen: Mal auf selbstgebastelte Menüs verzichten und sowas ganz einfach lösen.
Ich habe selbst zu einem Zeitpunkt viel zu viel Zeit mit Menüs im Text-Mode vergeudet, als ich eigentlich die Sprache besser lernen hätte sollen.
Wenn man eine Sprache erst mal einigermaßen beherrscht, kann man sicher immer noch GUI-Toolkits ansehen.
-
nman schrieb:
Später: Ja.
Wenn er allerdings schon so ein Menü baut, dann kann er auch jetzt ncurses nehmen.
-
ProgChild schrieb:
Wenn er allerdings schon so ein Menü baut, dann kann er auch jetzt ncurses nehmen.
Du verstehst nicht, worauf ich hinauswill.
Der Punkt ist: Ein Menü wird das Programm nicht wesentlich besser machen und ihm nicht helfen, die Sprache besser zu verstehen bzw. sprachspezifische Probleme nicht von GUI-Toolkit-Problemen unterscheiden können, etc.
-
nman schrieb:
Du verstehst nicht, worauf ich hinauswill.
Der Punkt ist: Ein Menü wird das Programm nicht wesentlich besser machen und ihm nicht helfen, die Sprache besser zu verstehen bzw. sprachspezifische Probleme nicht von GUI-Toolkit-Problemen unterscheiden können, etc.Das ist schon richtig. Er sollte z.B. erstmal Shellprogramme schreiben. Dass er es lieber ein bisschen bunter möchte kannst du ihm aber nicht verübeln. Als ich mit C++ angefangen habe, hab ich mir ziemlich schnell den Borland C++ Builder besorgt, weil man damit wunderbar schnell Anwendungen mit schönen Fensten, usw. bekommt. Man möchte halt gerne etwas sehen. Das kannst du sicher nachvollziehen. Und wenn er gerne was sieht, dann kann er das auch vernünftig machen.
Was du sagst ist prinzipiell richtig, aber der Mensch möchte halt auch schöne ergebnisse sehen und nicht nur wissen, dass er da jetzt was anspruchsvolles gemacht hat.
-
Auch wenn meine beiden Fragen nicht ganz konkret beantowrtet wurden dank ich euch für die Mühe.
Zum Menü:
Ich erspare mir auch lieber diese Menüführung, aber ich muss nunmal auf meinem Kenntnisstand eine portable Kontoverwaltung schreiben und unserer Prof will es nicht sehen, dass ich immer wieder eine Dialogabfrage untereinander klitsche.
Ich meine das mit dem claer und so weiter ist ja auch kein Prob, wenn auch sicher nicht die beste Variante, geb ich ja zu. Das Problem ist halt dasgetchar();
was ich jetzt noch versuche umzubauen, wenn es mir nicht gelingt Pech, denn das ist igentlich das einzige Problem was ich hab.
Das das mit dem Umlauten nicht so einfach geht, ist schade, aber damit kann ich leben. Wollt mich halt nur erkundigen, ob es für die Shell ähnlich einfache Sequenzen gibt, wie für die Win32-Konsole.Zu Curses:
Damit kann ich leider noch nix anfangen, weil wir das erst ab der nächsten Systemprogrammierungsvorlesung behandeln und es ein wenig spät ist, es selbst zu erforschen, da der Beleg spätestens morgen abgegeben werden muss und ich ihn heute fertig machen will.@nman: Hat das mit dem Umlauten etc. etwa mit curses, terminfo, termcap zu tun. *nichtlockerlas*
Denn spätestens in zwei Monaten brauch ich es dann doch, weil wir einen Texteditor mit integriertem Mail Client schreiben.
-
Richard schrieb:
Zum Menü:
Ich erspare mir auch lieber diese Menüführung, aber ich muss nunmal auf meinem Kenntnisstand eine portable Kontoverwaltung schreiben und unserer Prof will es nicht sehen, dass ich immer wieder eine Dialogabfrage untereinander klitsche.Brr, furchtbar wenn Leute so überhaupt keine Ahnung haben, tut mir leid für Dich.
Ich meine das mit dem claer und so weiter ist ja auch kein Prob, wenn auch sicher nicht die beste Variante, geb ich ja zu. Das Problem ist halt das getchar();
Naja, das Problem hast Du ja nur, weil Du zwischendurch immer wieder diese "Enter drücken um fortzufahren"-Orgien veranstaltest.
Das das mit dem Umlauten nicht so einfach geht, ist schade, aber damit kann ich leben. Wollt mich halt nur erkundigen, ob es für die Shell ähnlich einfache Sequenzen gibt, wie für die Win32-Konsole.
Die sind IMO schon unter Windows nicht allzu toll.
@nman: Hat das mit dem Umlauten etc. etwa mit curses, terminfo, termcap zu tun. *nichtlockerlas*
Es gibt wohl eine Menge Möglichkeiten, das irgendwie hinzubiegen, aber im Normalfall wirst Du mit GNU gettext oä am besten beraten sein.
Denn spätestens in zwei Monaten brauch ich es dann doch, weil wir einen Texteditor mit integriertem Mail Client schreiben.
Igitt, Mail-Client in den Editor integriert?
Ich hoffe der Editor ist in Wirklichkeit ein LISP-Parser in dem dann der Mail-Client läuft, sonst wäre das ja sehr hässlich.