2015-09-28 4 views
1

Прошу прощения за любые ошибки, связанные с любителем, но я по-прежнему новичок в этом. Для моего класса нам нужно преобразовать двойной ввод в строку для использования в другой части проекта. Проверка целых чисел работала очень хорошо, и я попытался использовать часть кода из этого предыдущего вопроса Validating a double in c++ , хотя, к моему огорчению, это не сработало.C++ Проверка двойного строчка

Вот мой код:

string input; 
bool valid; 
double num; 

//Verification of valid inputs 
do 
{ 
    valid = true; 
    cout << "What is the " << name << " rate of the population? (% per year): "; 
    getline(cin, input); 
    num = input.length(); 

    if (num == 0) 
    { 
     cout << "\nNo data was entered, please enter a number.\n"; 
     valid = false; 
    } 
    else 
    { 
     for (double i = 0; i < num; i++) 
     { 
      if (input.at(i) < '0' || input.at(i) > '9') 
      { 
       cout << "\nPlease enter a valid, positive number.\n"; 
       valid = false; 
       break; 
      } 
     } 
    } 
} while (valid == false); 
return stod(input); 

Спасибо.

Редактировать: Я только что нашел это How do i verify a string is valid double (even if it has a point in it)?, и я могу с уверенностью сказать, что понятия не имею, что происходит.

+1

Ответ в последней ссылке, (http://stackoverflow.com/a/29169409/464581), просто используется 'std :: stod', это хорошо. Просто. Вы можете * использовать * эту функцию, даже если вы ее не понимаете. ;-) –

+2

Как насчет использования ['std :: stod'] (http://en.cppreference.com/w/cpp/string/basic_string/stof) или [' std :: strtod'] (http: // en.cppreference.com/w/cpp/string/byte/strtof)? [Пример здесь] (http://stackoverflow.com/a/32792825/440558) (с целыми числами, но все тот же принцип). –

+0

Я попытался использовать пример из http://stackoverflow.com/questions/32792790/read-whether-int-or-string-using-the-file-extraction-operator/32792825#32792825, и он сломал мою программу = ( – Bowski

ответ

0

Если вы действительно заинтересованы, чтобы сделать это вручную, посмотрите на следующие методы:

How to manually parse a floating point number from a string

https://www.daniweb.com/programming/software-development/code/217315/c-function-stod-string-to-double-convert-a-string-to-a-double

и читать комментарии. Это не совсем понятно, но это должно сработать. Или еще лучше, проверьте код stod из C++.

0

Почему вы используете double в качестве индекса для строки? Кроме того, я бы пропустил с помощью ++ для увеличения двойного.

+0

Это то, как инструктор показывал нам, как это сделать, и как он хочет, чтобы мы это делали. Большая часть того, что я нашел в Интернете, показывает совершенно разные способы сделать это, но я застрял в этом так. =/ – Bowski

+0

You может сделать то же самое, но вместо этого переключится на 'int'. – rockworm

+0

Теперь вы подтверждаете, что получаете только цифры в своей строке ввода, как вы собираетесь проверять десятичную точку? – rockworm

0

Понял.

Просто нужно было добавить что-то к утверждению if.

if ((input.at(i) < '0' || input.at(i) > '9') && input.at(i) != '.') 
      { 
       cout << "\nError! illegal character was entered.\n"; 
       valid = false; 
       break; // 12w345 

       if (input.at(i) == '.') 
        ct++; 

       if (ct > 1) 
       { 
        cout << "Error! Only one dot allowed."; 
        valid = false; 

С ct - целое число со значением 0 для подсчета точек и обеспечения ввода только одного.

Смежные вопросы