Ich habe jetzt erstmal nicht mit dem Tutorial von proggen.org angefangen, sondern mit dem Openbook "C von A bis Z".
Dort wird anfangs auf das Problem des stdin puffers bei Konsoleneingaben eingegangen.
http://openbook.rheinwerk-verlag.de/c_v ... 5efcc47322
Deren beispiel "scanf2.c" verhält sich so wie dort auch angegeben. Möglichkeit 1 mit fflush verhält sich genauso wie das erste Beispiel, Möglichkeit 2 funktioniert wie es soll (ich kann also 3 Buchstaben eingeben und ausgeben lassen). Aber der Knackpunkt ist Möglichkeit 3 die wohl die beste Variante (weil verzicht auf scanf) sein soll.
Deren Code sieht so aus:
Code: Alles auswählen
/* scanf5.c */
#include <stdio.h>
int main(void) {
char ch;
char buf[2];
printf("Ein Zeichen bitte : ");
fgets(buf, 2, stdin);
sscanf(buf, "%c", &ch);
printf("Das Zeichen : %c\n",ch);
return 0;
}
Code: Alles auswählen
#include <stdio.h>
int main(void) {
char ch;
char buf[2];
char ch2;
char buf2[2];
printf("Zeichen 1: ");
fgets(buf, 2, stdin);
sscanf(buf, "%c", &ch);
printf("Zeichen 2: ");
fgets(buf2, 2, stdin);
sscanf(buf2, "%c", &ch2);
printf("Die Zeichen : %c %c\n", ch, ch2);
return 0;
}
Das sieht dann bei mir so aus:
Es verhält sich also genauso wie das original Beispiel und Möglichkeit 1. Was mache ich nun falsch?Zeichen 1: a
Zeichen 2: Die Zeichen : a
Getestet habe ich das unter OS X 10.10.4
Compiler:
und alternativ:gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin14.4.0
Thread model: posix
gcc-5 --version
gcc-5 (Homebrew gcc 5.2.0 --with-all-languages) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.