Я пытаюсь читать строки и числа с плавающей точкой из stdin, но у меня возникла странная проблема. При чтении определенных символов ввод «расходуется» и теряется перед чтением в виде строки. Я ожидаю, что любые символы перевернут бит сбоя, а затем очистятся, позволяя символу быть прочитанным как строка.
float fl;
string str;
while (std::getline(std::cin, line))
{
std::istringstream iss(line);
while (iss.good())
{
if (iss >> fl)
{
std::cout << "read: " << fl << "\n";
}
else
{
iss.clear();
if (iss >> str)
{
std::cout << "read: " << str << "\n";
}
}
}
}
Вот вывод, который я получаю. Вы можете видеть, что некоторые символы, например, не читаются как строки после того, как они не читаются как плавающие.
a
b
c
d
e
f
g
read: g
h
read: h
i
j
read: j
k
read: k
l
read: l
m
read: m
n
o
read: o
p
q
read: q
r
read: r
s
read: s
t
read: t
u
read: u
v
read: v
w
read: w
x
y
read: y
z
read: z
12.0
read: 12
12.33
read: 12.33
Когда я заменяю fl на целое, все работает отлично, проблем с чтением определенных символов не возникает. Я могу читать строки / строки без проблем. Это как-то связано со специальными форматами с плавающей точкой или чтением с плавающей точкой как шестнадцатеричным?
Я на OSX Apple LLVM версии 10.0.1 (clang-1001.0.46.4) Я попытался использовать другой компилятор, и он работы.