我使用此代码检查输入的学号是否是正确的位数。是否有像.length()这样的函数可以用于变量类型double?谢谢!
do {
cout << "Student's number: (Numeric only)";
cin >> studentNumber;
cin.ignore();
}
while (studentNumber.length() != 6);
答案 0 :(得分:7)
将其作为字符串读取,检查它的长度,当它仍在该表示中时(也检查它是否只包含[0-9]
),然后转换为double。实际上,如果你要用它做数学,只能转换成双倍。否则将其保留为字符串。
一般来说,非字符串类型的用户输入充满了危险。将其作为字符串读取,验证并转换。
答案 1 :(得分:4)
将其作为文本阅读,验证它,然后解析它:
std::string input;
bool valid = false;
while (!valid) {
cout << "Student's number: (Numeric only)";
cin >> input;
if (input.size() == 6)
valid = true;
}
double studentNumber = strtod(input.c_str());
答案 2 :(得分:3)
do {
cout << "Student's number: (Numeric only) " << flush;
} while( !( cin >> studentNumber ) ||
( studentNumber < 100000 ) ||
( studentNumber > 999999 ) );
在cin >> studentNumber
中放置while
也可确保用户输入的文字已成功转换为studentNumber
类型的内容。
答案 3 :(得分:3)
您不能只使用<
和>
吗?
// Require that studentNumber be 3 digits
if(studentNumber < 100 || studentNumber >= 1000) {
cout << "bad" << endl;
}
答案 4 :(得分:3)
如果切换到整数类型,简单除法可以实现此目的:
long studentNumber;
do {
// get number
} while (!(studentNumber / 100000L) || studentNumber / 1000000L);
如果您确实想要整数类型中的位数:
int long_digits(long l)
{
// this code will work for negative numbers, but we don't want them
if (l < 0L)
throw std::out_of_range("no negative numbers please");
int count;
for (count = 0; l; l /= 10L, ++count);
return count;
}
答案 5 :(得分:1)
为什么不使用log10?然后你需要舍入结果,可能使用floor(double)来找到整数
//remember math.h
#include <math.h>
do {
cout << "Student's number: (Numeric only)";
cin >> studentNumber;
cin.ignore();
}
while (floor(log10(studentNumber)) != 6);
编辑: 一点点解释:log10允许你在这个等式中找到x
10^x=y
其中给出y并且是你的指数。
长话短说,studentNumber
必须是6'字符',我们可以写成
10^5 <= studentNumber < 10^6
或
5 <= log10(studentNumber) < 6
然后
floor(log10(studentNumber)) ==5
仅当它是整数部分中的6位数时。