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 optimal

    das 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



  • @unknown

    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äckig 😉 thx

    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*


Anmelden zum Antworten