cout funktioniert nicht
-
Hi,
hat Jemand ne Idee?
dieses Problem wurde bereits 10000 mal durchgekaut. Guckst du in die FAQ:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html
MfG mikey.
-
Danke,
hab mir das jetzt n paar mal durchgelesen, und wollte nun wissen wie ich das denn einfüge.Muss ich das in eine externe Datei schreiben, die ich jedes mal mit #include einbinde?
Oder jedes mal irgendwie in den Code einbauen?
Kann mir pls jemand, falls man es direkt im Code einbauen soll, aufschreiben?
danke,
beste Grüße
ziox.
-
Ich habe Dir den Code gleich mal verbessert, und dazu die richtige Funktion eingebunden:
#include <iostream> void wait () { std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); } int main() { std::cout << "Test\n"; wait (); // Hier rufst Du die Funktion auf ... }
MfG mikey.
-
HallO!
Funktioniert perfekt, vielen dank!
Man muss das also nur noch bei jedem Programm oben einfügen?
Dankeschön, beste grüße
ziox.
-
Man muss das also nur noch bei jedem Programm oben einfügen?
Mach währenddessen mit Deinem Tutorial weiter, bis Du gelernt hast, was Funktionen sind, und wie man sie benutzt. Dann wirst Du auch den Sinn dieses Beispiels verstehen, und Deine Frage wird sich von selbst beantworten

In dieser Funktion wird nichts anderes gemacht, als der Eingabepuffer geleert, und danach eine Eingabe erwartet. Alternativ könntest du am Schluss auch nur
getchar ();schreiben, das bring den selben Effekt, allerdings mit dem Nachteil, dass sich evtl. noch etwas im Eingabepuffer befinden könnte, und das dann als Eingabe interpretiert wird !
MfG mikey.
-
Kannste auch in nen extra Header packen und den nach belieben mit "convenience" Funktionen erweitern
#ifndef _CONSOLEAPP_H_ #define _CONSOLEAPP_H_ #include <iostream> void wait () { std::cout << std::endl << "Press Enter to continue!" << std::endl; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); } #endif
-
So, alle Zweifel beseitigt, vielen Dank!
Ich wunder mich nur, wieso das im Buch nichts stand... Egal. Danke!ich halt
-
So, hab mich jetzt im Turoial weitergearbeitet, bin aber wieder auf einen Fehlergestoßen.Und zwar auf den gleichen, obwohl ich das eingebunden habe.
hier mal der Code:#include<iostream> using namespace std; void wait() { std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); } int main() { int zahl1; int zahl2; cout<<"Bitte eine Zahl eingeben\n"; cin>>zahl1; cout<<"Bitte noch eine Zahl eingeben\n"; cin>>zahl2; cout<<"Zahl 2: "<<zahl2<<"\n"; cout<<"Zahl 1: "<<zahl1<<"\n"; wait(); }Habe alles (meiner meinung nach) korrekt eingebunden.
Bitte korrigiert mich
beste Grüße
ziox.
-
es fehlt ertsmal wieder das return 0; am ende. und dann sieht das wegen der einrückung so aus, als wenn du das ganze in eine funktion gepackt hast. falls nicht, dann eben nicht...
Mfg Ominion
-
Ersetze die "wait ()" - Funktion mit dieser:
void wait () { setvbuf(stdin,NULL,_IONBF,0); setvbuf(stdin,NULL,_IOFBF,BUFSIZ); getchar(); }MfG mikey.
-
Ersetze die "wait ()" - Funktion mit dieser:
C/C++ Code:
void wait ()
{
setvbuf(stdin,NULL,_IONBF,0);
setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
getchar();
}MfG mikey.
Klappt perfekt, danke!
grüße
ziox.
-
Was wirdn hier zum Teil fürn Müll vonwegen das liegt an return 0; gepostet?!
#include<iostream> void wait() { std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.get(); } int main() { int zahl1 = 0; int zahl2 = 0; std::cout << "Bitte geben Sie eine Zahl ein: " << std::endl; std::cin >> zahl1; std::cout << "Bitte geben Sie eine weitere Zahl ein: " << std::endl; std::cin >> zahl2; std::cout << "Zahl 2: " << zahl2 << std::endl; std::cout << "Zahl 1: " << zahl1 << std::endl; wait(); }So ... um deinen Fehler zu erklären ... wenn du oben using namespace std; hinschreibst, musst du in der wait Funktion die std:: weglassen, oder du schreibst(so wich ichs jetzt gemacht hab) vor jede Funktion aus dem std namespace, also cout, cin, usw, ein std:: .
-
Was wirdn hier zum Teil fürn Müll vonwegen das liegt an return 0; gepostet?!
auf jeden fall gehört das "return 0;" dahin sonst ist es falsch!
-
krabbels schrieb:
Was wirdn hier zum Teil fürn Müll vonwegen das liegt an return 0; gepostet?!
auf jeden fall gehört das "return 0;" dahin sonst ist es falsch!
nö main muss kein return haben, Wenn kein return kommt, wird automisch erfolg vermeldet

-
(D)Evil schrieb:
So ... um deinen Fehler zu erklären ... wenn du oben using namespace std; hinschreibst, musst du in der wait Funktion die std:: weglassen
?
Man darf doch trotzdem den namespace verwenden, auch wenn die using-Klausel benutzt wurde.
-
Also bei mir funktioniert jetzt alles einwandfrei(insofern man wait() einbaut), und ich wolte nochmal fragen(aus reiner Interesse)
warum das denn s ist.
liegt das am Compiler, am System, oder wo sonst?
Immerhin wird das nirgends in nem Tutorial beschrieben das man sowas einbauen muss, und ich sehe ach des öfteren keine wait funktionen in manchen codes.Auch wenn ich manche programm öffne die bei Sampels von Dev c++ dabei sind, ist das nicht so.
bitte klärt mich auf, würd mich echt interessieren.
grüße
ziox.
-
@(D)Evil: was kackst du hier so rum? Ich habe nicht gesagt, dass das an dem return 0; liegt! Ich habe ihn nur nochmal darauf aufmerksam gemacht, dass er das nicht hingeschrieben hat! Les dir meinen Post nochmal durch, ich habe nicht einmal was von einer Fehlerquelle geredet. Ich habe nur versucht mit dem letzten Teil etwas mehr zu erfahren. Also bevor du hier anfängst wieder Ratten laufen zu lassen, lese dir erstmal den kompletten Post durch wenn du dazu was schreibst.
Ominion
-
Ich verzichte generell auf sowas wie die wait() Funktion.
Nötig ist die nur wenn du das ganze mit Doppelklick auf die .exe starten willst und dann ist es meiner Meinung nach nicht sinnvoll auf die Ausgabe wert zu legen.
Konsolenanwendungen sind nunmal dazu da, sie auf der Konsole auszuführen
=> Ausführen->cmd unter WinXP sonst gibts andere möglichkeiten ann eine Konsole zu kommen->Programm aus der Konsole aufrufen (auf den Pfad achten!)
-> wait is absolut unnötig
EDIT:
Ominion schrieb:
es fehlt ertsmal wieder das return 0; am ende. und dann sieht das wegen der einrückung so aus, als wenn du das ganze in eine funktion gepackt hast. falls nicht, dann eben nicht...
Mfg Ominion
Diese Aussage ist falsch!
return 0; fehlt nicht, da es nach ISO C++ bei main nicht nötig ist.
-
Ja jetzt sind wir an dem Punkt, konkretisieren wir das ganze mal ! Fakt ist nunmal, dass sich in ziox's Programmbeispiel noch etwas im Eingabepuffer befindet, dass dann als Eingabe interpretiert wird. Nun gut. Anschließend habe ich ihm eine Methode gezeigt, wie man den Puffer löschen kann, wobei sich später herausgestellt hat, dass es doch nicht funktioniert !
An was liegt das ? Bzw. was macht diese Funktion eigentlich genau ?? Ein kurzer Blick auf www.cppreference.com bestätigt, dass die Funktion "clear ()", "ignore ()" usw. den Puffer löschen. Aber was genau geht da vor sich ?? Was bedeutet zum Beispiel diese Zeile ??:
std::cin.ignore(std::cin.rdbuf()->in_avail());Mir ist aufgefallen, dass ziemlich viele selbstsicher diese Methode vorstellen, selbst in den FAQ's ist sie aufgeführt, aber keiner beschreibt, wie diese Funktion arbeitet, und was die einzelnen Parameter bedeuten. Letztendlich kann auch keiner eine konkrete Antwort auf ziox's Frage geben
Ich würde mich trotzdem auf eine Erklärung freuen, da mich das Thema auch interessiert, und es nicht ganz unpeinlich ist, das mit knapp einem Jahr C++ Erfahrung immer noch nicht zu verstehen ...MfG mikey.
-
hi!
Was ich auch wissen wollte, war ob hier jeder diese wait funktion benutzt, oder ob die Leute nur dünn gesäht sind?
An irgendwas muss das ja liegen, sonst würden mehr Tutorials auf diesen Fehler hinweisen, allerdings kenne ich keines, dasdas Tut.Und auch in keiner Sourcefile wird das beschrieben.
Ich besitze ca 3 c++ bücher, wobei aber in keinem diese Methode beschrieben wird.
@Mikey: musst du auch eine solche wait funktion einbinden?grüße
ziox.