字母输入运行无限循环

Posted

技术标签:

【中文标题】字母输入运行无限循环【英文标题】:alphabetic inputs run infinite loop 【发布时间】:2019-09-24 20:08:10 【问题描述】:

我写了一个函数来获取数字并尝试覆盖所有的输入可能性。

总的来说,它适用于数字输入,但是当我输入字母输入时,它会在屏幕上启动一个无限循环的打印语句。众所周知,计算机内部的单个字符,如“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;
  

【问题讨论】:

cin for an int inputing a char causes Loop that is supposed to check input to go wild的可能重复 这显然是 C++。您问题的哪一部分是特定于 C 的?如果没有,为什么要标记 C? 我将 num 和 pow 声明为双精度数据类型,当我输入 num 或 pow 的字母值或其启动无限循环和 char 数据类型时,我只是用来从用户那里获得答案所有语句都执行 旁注:for (int i = 1; i &lt;= pow; i++)for (int i = 0; i &lt; pow; i++) 相同,只是更多的人会觉得它很有趣,并想知道您是否有一个错误。 Yap.. 我知道 for 循环,但这不是这里的问题,如果我用 0 或 1 初始化 i ,问题就在这里.. 【参考方案1】:

最好尝试读取 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;

【讨论】:

以上是关于字母输入运行无限循环的主要内容,如果未能解决你的问题,请参考以下文章

8086汇编将小写字母转换为大写字母(含提示信息,无限循环,按“!”退出程序)

8086汇编将小写字母转换为大写字母(含提示信息,无限循环,按“!”退出程序)

While 循环用户输入

每个循环可能会或可能不会运行 CDialog 的无限线程

牛顿法程序(C 语言)循环无限运行

c++:在修改 c 字符串数组时帮助纠正无限循环