Я создаю простой синтаксический парсер с использованием C++, и я пытаюсь использовать istream >>, чтобы проверить, вводя ли я число или символ.C++: istringstream
вход:
a = 10
b = a
parser.cpp:
string inputLine, varLeft, equal, varRight;
double varValue
// please see update below
while(getline(cin, inputLine)){
istringstream stringSplitter(inputLine);
stringSplitter >> varLeft >> equal;
if(!(stringSplitter >> varValue)){
stringSplitter >> varRight;
}
}
Цель, позже в коде, если varRight пуст, я полагаю, что строка ввода был double
буквальным, в противном случае это строка, обозначающая переменную. Я понимаю, что могут быть логические ошибки, связанные со смешанным вводом, начинающимся с цифр, но я предполагаю, что все входные данные теперь правильно отформатированы. Почему a
во второй строке ввода отбрасывается? Какое решение вы предлагаете?
Update
Проблема не с утверждением, в то время как петли, то с утверждением, если в конце кодового блока в то время.
В фактическом коде цикл не является циклом while; Я использую векторный объект, содержащий строковые команды, и итерацию через них с помощью цикла for, который проходит через вектор, используя итераторы. Но, чтобы угодить комментаторам, я исправил его выше.
Это сработало отлично. Что касается цикла while, см. Обновление выше. Большое спасибо за Вашу помощь. – naxchange
Но как он проверяет, удалось ли «stringSplitter >> varRight;»? – 0x499602D2