如果小数点不是输入的第一个位置,我如何修改此函数,使其包含一个小数点作为输入数值的一部分?实际上,数字应该有一个小数位,可以是数字的第一个位置(索引[0](,也可以是数字中的任何其他位置。例如,如果我输入7.3,它应该返回7.3。
#include <iostream>
#include <cmath>
#include <climits>
#include <string>
using namespace std;
double ReadDouble(string prompt)
{
string input;
string convert;
bool isValid=true;
do {
isValid = true;
cout << prompt;
cin >> input;
if (isdigit(input[0]) == 0 && input[0] != '.' && input[0] != '+' && input[0] != '-' && input[0] != '+')
{
cout << "Error! Input was not a number.n";
}
else
{
convert = input.substr(0,1);
}
long len = input.length();
for (long index = 1; index < len && isValid == true; index++)
{
if (isdigit(input[index]) == 0){
cout << "Error! Input was not an integer.n";
isValid=false;
}
else if (input[index] == '.') {
;
}
else {
convert += input.substr(index,1);
}
}
} while (isValid == false);
double returnValue=atof(convert.c_str());
return returnValue;
}
int main()
{
double x = ReadDouble("Enter a value: ");
cout << "Your value: " << x << endl;
return 0;
}
atof已经完成了您需要的操作,所以如果您只是想让它正常工作,ReadDouble可以执行atof:
double ReadDouble(string prompt)
{
string input;
cout << prompt;
cin >> input;
return atof(input);
}