AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[C] scanf() wird übersprungen

Ein Thema von Matze · begonnen am 13. Mai 2007 · letzter Beitrag vom 13. Mai 2007
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

[C] scanf() wird übersprungen

  Alt 13. Mai 2007, 06:24
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?


Grüße
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: [C] scanf() wird übersprungen

  Alt 13. Mai 2007, 07:03
Wird denn der Text "Experteneinstellungen?..." angezeigt und nur die scanf-Eingabe übersprungen ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [C] scanf() wird übersprungen

  Alt 13. Mai 2007, 07:05
Jupp. Alles würde so ablaufen, als sei der 2. scanf()-Aufruf nicht da. Also ausgegeben wird alles.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#4

Re: [C] scanf() wird übersprungen

  Alt 13. Mai 2007, 07:12
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);
  // ...
}
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [C] scanf() wird übersprungen

  Alt 13. Mai 2007, 07:29
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
  Mit Zitat antworten Zitat
boserPascal

Registriert seit: 4. Apr 2006
96 Beiträge
 
Delphi 5 Professional
 
#6

Re: [C] scanf() wird übersprungen

  Alt 13. Mai 2007, 07:49
Morgen,

so geht es auch ohne Speicher zu verschwenden.

http://cppreference.com/stdio/fflush.html

P.S. das FILE heißt "stdin"

Gruß Stefan!
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: [C] scanf() wird übersprungen

  Alt 13. Mai 2007, 07:55
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...
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...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: [C] scanf() wird übersprungen

  Alt 13. Mai 2007, 08:07
@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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:05 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