Я пишу программу, которая принимает входные данные в одну строку следующим образом:
Прогон 10,1 50,2
Где «Выполнить» — это строка, а остальная часть строки — двойная. Экспоненциальная запись и отрицательные числа также могут использоваться как двойные входные данные: например, -5.88e-11 (стандартная библиотека C++ допускает это).
Вот исходный код, который я пробовал.
string command;
double input1;
double input2;
getline(cin,input);
stringstream ss(input);
ss >> command >> input1 >> input2;
Проблема с этим подходом заключается в том, что если вместо двойного числа вводится пробел или буква, вывод строкового потока будет 0. Я полагаю, что это связано с тем, что в C++ нет нулевых держателей для двойного числа.
Другой подход, который я пробовал, заключается в том, чтобы читать каждый ввод как строку, проверять, является ли строка числовой, и преобразовывать ее в двойную. Однако это усложняется, когда можно вводить научные обозначения и отрицания. Попробуйте это:
for (int i=0; input1[i]; i++){
if (isdigit(input1[i])){\
isDigit = true;
}else{
isDigit = false;
}
}
Как я могу проанализировать этот ввод со строкой и буквенно-цифровыми двойниками в одной строке? (при сохранении негативов и научных обозначений)
Спасибо!
cin >> command >> input1 >> input2;
? Может избавить вас от некоторых проблем. - person xiaofeng.li   schedule 15.10.2015