如何检查用户是否输入了有效值
How can I check if the user has entered valid value?
我正在写一个项目,我必须检查用户是否为特定内容输入了有效值。例如,第一种情况是检查他是否输入了一个长度不超过6且大于0的整数。我正在使用struct,所以我的代码是这样的:
#include <iostream>
using namespace std;
int dolzina_int(int vlez);
int main()
{
struct pole{
int sifra; // sifra na artiklot
string opis; // opis na artiklot
float cena; // edinecna cena
int vlez_kol; // vlezna kolicina
int izlez_kol; // izlezna kolicina
float dan_stapka; // danocna stapka
float iznos; // iznos
int datum; // datum na vlez i izlez (GGMMDD)
}artikli[100]; // maksimalen broj na artikli e 100
for (int i = 0; i < 5; i++){
cin >> artikli[i].sifra;
while(!(cin >> artikli[i].sifra) ||
(artikli[i].sifra < 0 || (dolzina_int(artikli[i].sifra) > 6)))
{
cout << "Error" << endl;
cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
}
}
return 0;
}
// funkcija za dolzina na integer
int dolzina_int(int vlez){
int dolzina = 1;
while(vlez > 0){
dolzina++;
vlez /= 10;
}
return dolzina;
}
所以,我的代码似乎可以工作,第一部分,它确实检查它是>6还是<0,但第二个如果,它不能正常工作来检查它是否是整数。所以我的问题是,如何确保用户输入的是一个整数值,如何确保整数的长度不大于6或值<0,同时,如果是,让他重新输入,并检查新输入的值,因为我的代码目前没有这样做。
for (int i = 0; i < 5; i++){
artikli[i].sifra = 1;
do{
cout << "Enter a code: ";
while(!(cin >> artikli[i].sifra)){
cin.clear();
cin.ignore();
cout << "Invalid entry. Enter a new value: ";
}
}while(artikli[i].sifra > 0 && dolzina_int(artikli[i].sifra) > 6);
}
您应该注意,只有当从文件中读取的内容可以用作对象类型的正确值(在本例中为整数sifra
)时,提取才会成功。如果不起作用,ios_base::failbit
将被设置为流状态。
因此,需要做的是,当给出不正确的值时,我们丢弃错误的文本,清除流状态,然后重新尝试extaction。例如:
#include <iostream>
#include <string>
#include <limits>
int main()
{
for (int i = 0; i < 5; ++i)
{
while (!(std::cin >> artikli[i].sifra) ||
((artikli[i].sifra < 0) || (artikli[i].sifra > 6)))
{
std::cout << "Entered an incorrect value, try again.n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
}
// ...
}
}
首先你应该检查一下:
http://www.cplusplus.com/reference/cctype/
其次,我认为你过于复杂了…
1) 读入int
2) int 的检查值
3) 重复
所以我会做这个
对于(i=0到i<5加1到i)
while(输入的值不是数字)
获取数字,直到值为有效
类似这样的东西:
for(i = 0; i < 5; i++) {
cout << "Enter the code" << endl;
cin >> artikli[i].sifra;
while(!is_digit) {
cout << "Invalid, please repeat" << endl;
cin >> artikli[i].sifra;
}
}
假设您想将输入限制为整数,并将它们限制在特定的[min, max]
范围内,您可以这样做:
int input = -1;
do
{
std::cout << "Enter a value in the range [min, max]: ";
while (!(std::cin >> input)) // while the input is invalid
{
std::cin.clear(); // clear the fail bit
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n'); // ignore the invalid entry
std::cout << "Invalid Entry! Please Enter a valid value: ";
}
} while (min > input || max < input);
其中min
和max
是您希望将值保持在两者之间的任何值。
相关文章:
- 检查输入是否不是整数或数字
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 检查TCHAR数组输入是否为带符号整数C++
- 检查输入 std::array 指针数据是否等于某个常量数组
- 是否可以在命令行中将输入参数传递给可执行文件
- 验证用户输入和整数是否C++
- 如何检查输入是否有效?
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- 如何检查用户是否输入了元音字符?
- C 检测用户是否输入字符串而不是INT
- 如何检查用户是否输入了整数
- 提示再次运行程序:修复他们是否输入了无效语句
- 如何检查用户是否输入了有效值
- 我怎样才能进行倒计时,每秒检查一次是否输入了某些内容,而不会中断
- 我想检测用户在按下 Enter 之前是否输入了字符
- C++正在检查用户是否输入了有效答案
- 如何检查终端I/O导航时用户是否输入了错误的值
- 如何检查用户是否输入足够的项目
- 使用if语句查看用户是否输入了正确的字符串