myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   C Tastaturpuffer leeren (https://mygully.com/showthread.php?t=2804255)

HagenTronje 13.01.13 00:52

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?

darkolaf1 13.01.13 07:07

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

HagenTronje 13.01.13 12:20

?
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;
}


slahn 13.01.13 20:04

versuchs mal mit [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] ...

HagenTronje 13.01.13 20:09

geht das auch in C?
schaut so objektorientiert aus, und steht auch cpp dabei

slahn 13.01.13 20:36

Sorry, habe durch den zweiten Post geglaubt es geht um C++ ... sorry ...

Für C gibt es fflush() ...

HagenTronje 13.01.13 21:36

fflush(stdin), kenn ich!
funzt aber wie in meinem ersten post erwähnt nur unter Windoof!

slahn 14.01.13 00:19

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 ...

revolerheld5 14.01.13 01:11

Die Lösung zu deinem Problem findest du hier: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

germgerm 14.01.13 08:54

Oder du schaust dir [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] genauer an.

HagenTronje 14.01.13 17:35

Zitat:

Zitat von slahn (Beitrag 24196579)
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.