[C] scanf() wird übersprungen
Hi,
folgender Code funktioniert in C (Konsolenanwendung) ohne Probleme und ich werde aufgefordert, 2 mal etwas einzugeben:
Delphi-Quellcode:
Bei folgendem wird das 2. scanf() ignoriert, als stünde es nicht da:
printf("Experteneinstellungen? j/n: ");
scanf("%c", &input_yes_no); printf("Delay (ms): "); scanf("%d", &delay_time);
Delphi-Quellcode:
Wie die Variablen deklariert sind, dürfte klar sein, doch der Vollständigkeit halber:
printf("Delay (ms): ");
scanf("%d", &delay_time); printf("Experteneinstellungen? j/n: "); scanf("%c", &input_yes_no);
Delphi-Quellcode:
Wie kann das denn sein? :gruebel:
char input_yes_no;
int delay_time = 100; Grüße |
Re: [C] scanf() wird übersprungen
Wird denn der Text "Experteneinstellungen?..." angezeigt und nur die scanf-Eingabe übersprungen ?
|
Re: [C] scanf() wird übersprungen
Jupp. Alles würde so ablaufen, als sei der 2. scanf()-Aufruf nicht da. Also ausgegeben wird alles.
|
Re: [C] scanf() wird übersprungen
Aha, dann steht im Tastaturpuffer noch ein Zeichen z.B. ein Enter.
Versuchs mal mit
Code:
int main ()
{ char str [80]; // nicht nur ein char scanf ("Enter a Value: %s",str); // ... } |
Re: [C] scanf() wird übersprungen
Tatsache, das ist die Lösung, vielen Dank. :)
Aber muss ich den String ganze 80 Zeichen lang machen, würden da nicht auch deutlich weniger genügen? Oder ist das nur reichlich dimensioniert, damit es auf jedenfall klappt? Edit: Die Eingabe kann ich nun jedoch so nicht überprüfen:
Code:
printf("Experteneinstellungen? j/n: ");
scanf("%s", &input_yes_no); expert_options = (input_yes_no == "j"); // HIER |
Re: [C] scanf() wird übersprungen
Morgen,
so geht es auch ohne Speicher zu verschwenden. http://cppreference.com/stdio/fflush.html P.S. das FILE heißt "stdin" Gruß Stefan! |
Re: [C] scanf() wird übersprungen
Nein, den String musst du nicht so lang lassen, ist nur so dahin getippt...
Ja, das mit der Abfrage... wenn ich noch wüsste wie man das mit dem scanf() machte... :gruebel: Also den Puffer löschen... Naja eine Lösung hätt ich vill. , verwende eine Schleife
Code:
Ich hoffe mal das der Syntax so richtig ist....lang lang ist's her...
int main ()
{ char c; printf("..."); do { c=getchar(); } while (c = 'j' | c = 'n'); putchar (c); //... } |
Re: [C] scanf() wird übersprungen
@Stefan: Das sehe ich mir mal an, danke :)
@Matti: Die Syntax ist die gleiche wie in Java, PHP, ... also
Code:
Die Schleife halte ich fast für etwas übertrieben, aber mal sehen, was ich nutzen werde. Die Schleife hat jedoch den Vorteil, dass ich den anderen leicht erklären kann, was der Code macht.
while ((c == 'j') || (c == 'n'))
{ ... } Danke euch beiden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz