我正在编写一个项目,我必须检查用户是否输入了特定事物的有效值。例如,第一种情况是检查他是否输入了一个整数,该整数不超过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;
}
所以,我的代码似乎工作,第一部分,它确实检查它是&gt; 6还是&lt; 0,但是第二部分,如果它不能正常检查它是否是整数。所以我的问题如下,我怎样才能确保它是用户输入的整数值,如何确保整数的长度不是> 6或者值是&lt; 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);
}
答案 0 :(得分:3)
您应该注意,只有从文件中读取的内容可以用作对象类型的正确值(在本例中为整数sifra
)时,提取才会成功。如果它不起作用,ios_base::failbit
将在流状态中设置。
所以需要做的是,当给出不正确的值时,我们丢弃错误的文本,清除流状态,并重新尝试提取。例如:
#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');
}
// ...
}
}
答案 1 :(得分:0)
首先你应该看看这个:
http://www.cplusplus.com/reference/cctype/
其次,我认为你过度复杂了......
1)读入int
2)检查int的值
3)重复
所以我会这样做
for(i = 0到i&lt; 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;
}
}
答案 2 :(得分:0)
假设您想要将输入限制为整数并将它们放在特定的[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
是您希望保持值之间的任何值。