字母输入运行无限循环
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 <= pow; i++)
与 for (int i = 0; i < 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汇编将小写字母转换为大写字母(含提示信息,无限循环,按“!”退出程序)