gpt4 book ai didi

c++ - 关于 while() 中的 isalpha() 是微不足道的

转载 作者:行者123 更新时间:2023-11-28 00:30:02 24 4
gpt4 key购买 nike

不要介意我使用的 header 数量不多。我只是复制我遇到问题的代码片段,并包含每个 header ,因为它不会造成伤害。

我正在做一个简单的检查,看看用户输入的预期整数是否不是字符。如果用户输入一个字符,他们将被带回 while 循环的开始,直到输入一个整数。

      while (edgeLength<4 || edgeLength>12)
{
//...
}

这可确保输入 4 到 12 之间的数字,并按预期工作。

我的问题:

为什么当我输入任何字符时,说'x',while 循环的内容会无限循环?我指定 isalpha(edgeLength) 作为要注意的条件,但没有成功。

#include <math.h>   // for exponents
#include <iostream> // for cout<< and cin>>
#include <stdlib.h> // for exit() and rand()
#include <ctype.h> // for conversion to upper case and isalpha
#include <time.h> // for seeding random generator
#include <iomanip> // for formatting the board (setw)
using namespace std;

int main()
{
int edgeLength;
cout<<"Enter the size board you want, between 4 and 12: ";
cin>>edgeLength;


while (edgeLength<4 || edgeLength>12 || isalpha(edgeLength))
{
cout<<"Invalid size. Choose a value between 4 and 12: ";
cin>>edgeLength;
}
return 0;

}

当前输出:

Enter the size board you want, between 4 and 12: e
Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:Invalid size. Choose a value between 4 and 12:
...
...
...

期望的输出:

Enter the size board you want, between 4 and 12: e
Invalid size. Choose a value between 4 and 12: 5
[process returns 0]

最佳答案

当 cin 需要一个 int,但输入不能转换为 int 时,它会失败并将输入数据留在流中。因此,如果你循环,你会一遍又一遍地读取相同的数据,每次都无法将其转换为 int。请注意,如果转换失败,cin >> edgeLength 将返回 false,因此您可以对其进行测试。

This page解释了这一切,以及正确处理这种情况的代码片段:

#include<iostream>
#include<limits>

using namespace std;
int main()
{

cout << "Enter an int: ";
int x = 0;
while(!(cin >> x)){
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Invalid input. Try again: ";
}
cout << "You entered: " << x << endl;
}

关于c++ - 关于 while() 中的 isalpha() 是微不足道的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com