Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [C] scanf() wird übersprungen (https://www.delphipraxis.net/91998-%5Bc%5D-scanf-wird-uebersprungen.html)

Matze 13. Mai 2007 06:24


[C] scanf() wird übersprungen
 
Hi,

folgender Code funktioniert in C (Konsolenanwendung) ohne Probleme und ich werde aufgefordert, 2 mal etwas einzugeben:

Delphi-Quellcode:
printf("Experteneinstellungen? j/n: ");
scanf("%c", &input_yes_no);

printf("Delay (ms): ");
scanf("%d", &delay_time);
Bei folgendem wird das 2. scanf() ignoriert, als stünde es nicht da:

Delphi-Quellcode:
printf("Delay (ms): ");
scanf("%d", &delay_time);

printf("Experteneinstellungen? j/n: ");
scanf("%c", &input_yes_no);
Wie die Variablen deklariert sind, dürfte klar sein, doch der Vollständigkeit halber:

Delphi-Quellcode:
char input_yes_no;
int delay_time = 100;
Wie kann das denn sein? :gruebel:


Grüße

turboPASCAL 13. Mai 2007 07:03

Re: [C] scanf() wird übersprungen
 
Wird denn der Text "Experteneinstellungen?..." angezeigt und nur die scanf-Eingabe übersprungen ?

Matze 13. Mai 2007 07:05

Re: [C] scanf() wird übersprungen
 
Jupp. Alles würde so ablaufen, als sei der 2. scanf()-Aufruf nicht da. Also ausgegeben wird alles.

turboPASCAL 13. Mai 2007 07:12

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);
  // ...
}

Matze 13. Mai 2007 07:29

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

boserPascal 13. Mai 2007 07:49

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!

turboPASCAL 13. Mai 2007 07:55

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:
int main ()
{
  char c;

  printf("...");
  do {
    c=getchar();
  } while (c = 'j' | c = 'n');
  putchar (c);

  //...
}
Ich hoffe mal das der Syntax so richtig ist....lang lang ist's her...

Matze 13. Mai 2007 08:07

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:
while ((c == 'j') || (c == 'n'))
{
  ...
}
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.
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