буквенные вводы запускают бесконечный цикл - PullRequest
3 голосов
/ 24 сентября 2019

Я написал функцию для вычисления числа и попытался охватить все возможности ввода.

В целом, он отлично работает с числовым вводом, но при вводе алфавитного ввода запускает бесконечный цикл печати операторов на экране.Как все мы знаем, что внутри компьютера один символ, такой как «A или a или b или B», и так далее представлен целыми числами, и, как я узнал от своего учителя, мы можем хранить отдельные символы в переменной с целочисленным типом данных.я не говорю о строках, что означает набор символов.эта программа создает проблему с одним символом!

#include <iostream>
#include <string>
using namespace std;
void squire();

int main() {
  squire();
}

void squire() {
  double num = 1.0, pow = 1.0, Squire_Number = 1.0;
  char ans;

  reStart:
    cout << "please Enter the Number: \n";
    cin >> num;
    cout << "please enter the nmber you want to power the number with: \n";
    cin >> pow;
    if (num > 0 && pow>0) {
      for (int i = 1; i <= pow; i++) {
        Squire_Number *= num;
        }
        cout << pow << " power of " << num << " is equil to : " << Squire_Number;
        goto option;
      }
    else
      {
        cout << "Please enter Positve Integers. \n" ;
        option:
        cout<< "\nPease type 'Y' to Enter the values again OR type 'c' to Exit ! \n";
        cin >> ans;
        if (ans == 'y' || ans == 'Y') {
          goto reStart;

        } else if (ans == 'c' || ans == 'C') {
          cout << "thank you for using our function. \n";
        }
      }

  return;
  }

1 Ответ

1 голос
/ 24 сентября 2019

Лучше попытаться прочитать ввод в std :: string, затем проанализировать строку, чтобы проверить, есть ли у вас только числовые символы, и затем использовать std :: atoi, чтобы преобразовать строку в целое число.Последнее замечание, избегайте использования инструкций goto, эта практика затрудняет чтение кода.

#include <iostream>
#include <string>
#include <cstdlib>

bool OnlyNumeric(const std::string& numStr)
{
    size_t  len= numStr.length();
    int i;
    for (i=0;i<len && numStr[i]  <='9' && numStr[i]  >='0';i++) ;

    return i == len;
}


int main()
{
    std::string inputStr;
    int num;

    do{
        std::cout  << "Input number:\n";
        std::cin >> inputStr;
    }   
    while (!(OnlyNumeric(inputStr)  && (num=std::atoi(inputStr.c_str())) ));


    std::cout  << "Your number is : " << num;

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...