Eingabe in Variable ohne anschließenden Zeilenvorschub gesucht
-
Hallo xgrnsxs!
Warum so kompliziert?
Ich würde mir eine eigene Format-funktion schreiben, so zum Beispiel:inline void printLine(const int& menge, const double& preis) { std::cout << menge << "\t\t" << preis << std::endl; }
Diese Funktion rufst du einfach nach jedem Einlesen der Menge und dem Preis, (selbstverständlich mit den aktuell eingelesenen Werten) auf.
Nur so ein Vorschlag ...
Caipi
-
Danke
Ich werde das gleich mal ausprobieren.
Ich muss dazu sagen das ich n ziemlicher Anfänger bin was Programmieren mit C++ angeht und dann das mit diesen Funktionen usw. damit hab ich mich noch gar nicht beschäftigen können. Habe vor 3 Tagen angefangen mich mit C++ zu beschäftigen, weil ich java zum ko.... naja nicht so toll finde.
VIelleicht magst du mir das was du da gemacht hast eben erklären. Das hört sich für viele Zwecke sehr praktisch an.
thx
-
@xgrnsxs
Ja, was soll ich sagen, die Funktion, die ich gepostet hab, ist eine wirklich simple Funktion. Sie erwartet zwei Read-Only Referenzen (=Es werden keine Kopien der Argumente erzeugt, sonderen diese werden direkt übergeben), die erste auf int, die zweite auf double.
Nun gibt die Funktion als einzige Anweisung die beiden Argumente (Menge und Preis) aus.Wenn du bei dieser Funktion Probleme mit dem Verstehen haben solltest, würde ich dir empfehlen mal in den folgenden beiden Tutorials das Kapitel Funktionen, Referenzen etc. durchzulesen.
http://www.volkard.de/vcppkold/inhalt.html
http://tutorial.schornboeck.net/viel Erfolg!
Caipi
-
Thx für den Tip.
Hab das soweit verstanden wie das mit den Funktionen geht. Leider gibt es da noch ein Problem, denn diese Funktion gibt zwar die Zahlen in einer Zeile aus, nur die EIngabe erzeugt ja immer noch Zeilenvorschübe.
Ausserdem bewirkt die Funktion das die Zahlen ja dann doppelt da stehen, das ist auch nicht so optimaldas sieht dann so aus:
Menge Preis 2 1.99 2 1.99 3 4.95 3 4.95
Irgendwie muss ich das bei der Eingabe schon verhindern, das der mir den Zeilenvorschub macht. Das Return aus dem Inputstream muss verschwinden... das muss irgendwohin geschluckt werden damit es nicht auf der Konsole auftaucht. Ich weis nur nicht wie.
Aber trotzdem danke für die Mühe
-
du koenntest das ganze mit
getch();
eingben lassen, dass lässt gar kein Zeichen anzeigen--> Das ganze in ein char array --> dann in einen String und dann irgenwie in einen double oder int??? und mit ein bisschen Formatieren und probieren dann wieder auf der Konsole ausgeben lasse???
Gruß unknown12345
p.s.: Wenn ich etwas mehr Zeit habe schau ich mir das mal an und schreib ein Beispiel
-
ok ich habe eindeutig zu viel Zeit, der Code ist zwar etwas unübersichtlich und nicht verkommentart, aber so ungefähr funktioniert dein Problem!
#include <iostream> #include <string> #include <conio.h> #include <cmath> using namespace std; double ein(char *einer) { double a; a = atof(einer); cout << a; return a; } int main() { bool a = true; string ab; char *b; double c; int d; double f; cout << "Registrierkassenprogramm:\n\n"; cout << "Menge Preis\n"; while(a) { ab = getch(); b = new char[ab.length()+1]; ab.copy(b, string::npos); b[ab.length()] = 0; if(*b == '*') { a = false; } else { d = ein(b); cout << " "; *b = getch(); c = ein(b); f = f + (c*d); cout << "\n"; } } return 0; }
Du musstihn halt noch verbessern!
-
hi, mir fällt grad auf, dass man auch immer nur eine Zahl nur eingeben kann, dass kannst du aber machen indem du den Wert von getch erstmal in ein int gibst und dann warten laesst, bis der wert 13 auftaucht (fuer Enter) und dann abbrechen laesst!
gruß unknown12345
-
Hey ... das klappt soweit *freudentanz*
Ich frag mich nur warum das bei mir mit getch() nie gefunzt hat. Hab versucht das mit dem conio.h zu bekommen, aber irgendwie hat der Compiler trotzdem jedesmal gemeckert.
jetzt muss ich das nur noch hinbekommen, das ich das mit dem * und dem + halt abbrechen kann, aber das werd ich noch schaffen glaub ich.
Da bin ich sehr hartnäckigthx
Achja und nochwas. Hab vorher schonmal mit #include <conio.h> versucht um an dieses gotoxy(int x, int y) zu kommen aus Pascal zeiten, aber anscheinend wurde diese Funktion wohl aus dem Header entfernt. Vielleicht hat ja jemand ne Idee wie und ob man sone Funktion (oder ist es ne Methode???) nicht irgendwie wiederbeleben kann, oder ob es dafür vielleicht n Ersatz gibt. Ich kann mir kaum vorstellen das Programmierer, die Programme für Eingabeaufforderung oder für Linux Konsole schreiben, auf solche Funktionen, wie den Cursor auf beliebige Koordinaten zu setzen, verzichten können.
-
Hi also ich habe einen vorschlag
lies doch deine eingaben in einen char ein und schneide das letzte zeichen (\n) einfach weg:wortlänge bestimmen und dann dies:
wort[wortlänge] = ' ';
zum schluss wandelst du das in double oder int um.
-
Wenn dus mit gotoxy machen willst, dann schreib dir halt eine eigene Funktion, nachdem ich ein wenig nachgeforscht habe bin ich auf das gekommen:
#include <windows.h> void gotoxy(short x, short y) { HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X=x-1; pos.Y=y-1; SetConsoleCursorPosition(hCon, pos); }
probier das mal aus, ist aber ungetestet
Gruß unknown12345
-
Allerbesten Dank an alle die mir geholfen haben
der Vorschlag von unknown12345 funktioniert. Ich find das gut das mir so viele geholfen haben. Sonst wär ich sicher schon verzweifelt und hätte mich mit was anderem beschäftigen müssen.
Wenn es jemanden interessiert kann ich ja mal das fertige Programm hier reinposten, sobald es so funzt wie ich mir das vorgestellt hab.
Vielleicht taucht ja nochmal das ein oder andere Problemchen auf... dann hört ihr wieder von mir *grins*