Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
|
13.01.13, 00:52
|
#1
|
Erfahrener Newbie
Registriert seit: Dec 2010
Beiträge: 162
Bedankt: 18
|
C Tastaturpuffer leeren
Ich weiß, das es darüber dutzende Einträge im Internet gibt, aber irgendwie konnte mich keiner Zufrieden stellen
fflush(stdin); funktioniert nur auf Windows,
while(getchar()!='\n');
und
scanf("%c",&variable);
haben den Effekts, das, im Falle eines bereits leeren Puffers, auf eine Eingabe gewartet wird.
Jemand eine Idee, wie ich das OS unabhängig, mit einer Schleife realisieren kann?
__________________
Blödsinnige Beiträge, bitte einfach löschen!
|
|
|
13.01.13, 07:07
|
#2
|
Anfänger
Registriert seit: Feb 2009
Beiträge: 26
Bedankt: 9
|
Ich hoffe es hilft :
#include <iostream>
using namespace std;
int main ()
{
int a;
do
{
cout << "eingabe"<<"\n"<<"zum abbrechen 5 eingeben" <<endl;
cin >> a;
}while(a!=5);
}
Es wird solange die Schleife wiederholt , bis die Abbruchbedingung "5" eingegeben wurde. Schnell getestet auf der bash
|
|
|
13.01.13, 12:20
|
#3
|
Erfahrener Newbie
Registriert seit: Dec 2010
Beiträge: 162
Bedankt: 18
|
?
ich will ja eben nicht, das man nochmal was eingeben muss, sondern einfach, dass der Tastaturpuffer geleert wird, so wies mit fflush(stdin) funktioniert.
Verwendungszweck:
Code:
int liesInt(int untergrenze, int obergrenze){
int eingelesen=0;
char dummy=0;
while( scanf("%d%c",&eingelesen,&dummy)!=2 || dummy != '\n' || eingelesen <= untergrenze || eingelesen >= obergrenze){
puts("Ungültige Eingabe.");
while(getchar()!='\n'); //die Zeile hier funktioniert nur dann, wenn aufgrund einer
// komplett Blödsinnigen Eingabe wiederholt wird. Liegt nur die Zahl außerhalb des Intervalls,
// so wird auf eine weitere Eingabe gewartet.
}
return eingelesen;
}
__________________
Blödsinnige Beiträge, bitte einfach löschen!
|
|
|
13.01.13, 20:04
|
#4
|
Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
versuchs mal mit [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] ...
|
|
|
13.01.13, 20:09
|
#5
|
Erfahrener Newbie
Registriert seit: Dec 2010
Beiträge: 162
Bedankt: 18
|
geht das auch in C?
schaut so objektorientiert aus, und steht auch cpp dabei
__________________
Blödsinnige Beiträge, bitte einfach löschen!
|
|
|
13.01.13, 20:36
|
#6
|
Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
Sorry, habe durch den zweiten Post geglaubt es geht um C++ ... sorry ...
Für C gibt es fflush() ...
|
|
|
13.01.13, 21:36
|
#7
|
Erfahrener Newbie
Registriert seit: Dec 2010
Beiträge: 162
Bedankt: 18
|
fflush(stdin), kenn ich!
funzt aber wie in meinem ersten post erwähnt nur unter Windoof!
__________________
Blödsinnige Beiträge, bitte einfach löschen!
|
|
|
14.01.13, 00:19
|
#8
|
Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
Sehe gerade dass in C die funktion eigentlich nur für Output deffiniert ist ... dann solltest du einfach selbst den Puffer leeren, indem du einfach alle Zeichen ausliest ...
|
|
|
14.01.13, 01:11
|
#9
|
Newbie
Registriert seit: Dec 2011
Beiträge: 60
Bedankt: 19
|
Die Lösung zu deinem Problem findest du hier: [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
|
|
|
14.01.13, 08:54
|
#10
|
bla
Registriert seit: Mar 2010
Beiträge: 309
Bedankt: 301
|
Oder du schaust dir [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] genauer an.
|
|
|
14.01.13, 17:35
|
#11
|
Erfahrener Newbie
Registriert seit: Dec 2010
Beiträge: 162
Bedankt: 18
|
Zitat:
Zitat von slahn
dann solltest du einfach selbst den Puffer leeren, indem du einfach alle Zeichen ausliest ...
|
genau das möchte ich!
Das geht entweder mit scanf string, oder mit getchar, nur beide varianten verlangen, sollte der tastaturpuffer bereits leer sein, nach einer eingabe
__________________
Blödsinnige Beiträge, bitte einfach löschen!
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 Uhr.
().
|