Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

alphabetic inputs run infinite loop

I wrote a function to squire number and try to cover all the input possibilities.

Overall it works fine with numeric input, but it starts a infinite loop of printing statements on screen when I enter alphabetical input.As all we know that inside computer single character like "A or a or b or B" so on is represented by integers and as i learned from my teacher that we can store single characters into a variable with integer data type. i am not talking about strings which means collection of characters . this program create problem with single character !

#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;
  }
like image 832
LIAQAT ALI Avatar asked Feb 26 '26 19:02

LIAQAT ALI


1 Answers

Better try to read the input in an std::string, then parse the string to check if you only have numeric characters and then use std::atoi to convert the string in integer. One last recomendation, avoid to use goto instructions, this practice make a code difficult to read.

#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;
}
like image 84
Mauricio Ruiz Avatar answered Mar 01 '26 09:03

Mauricio Ruiz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!